在android上以编程方式更改视图尺寸

时间:2014-05-19 22:36:20

标签: android layout android-view

我有两个相互重叠的视图,其中一个视图作为其他视图的主视图。我正在翻译所有捏合和平移以缩放并调整主视图。 现在我想将这些信息发送给奴隶(android.view.View的子类)。据说其他观点没有回应这个维度。我试过以下方法

ViewGroup.LayoutParams params = this.getLayoutParams();
params.height = height;
params.width = width;
this.setLayoutParams(params);this.requestLayout();

setMeasuredDimension(width, height);

this.setMinimumHeight(height);
this.setMinimumWidth(width)

这些似乎都不起作用。

使用onTouchEvent我调整TextureView的大小并将其发送到另一个View对象。获取有关大小更改的信息(大多数情况下大于父级维度(和屏幕大小))另一个视图也应增加/更改其大小。 子类视图不会增长到提供给它的维度。此外,增加仅限于父级大小(在我的情况下,其宽度:1080高度:1776),而它可以超过使用

的textureView中的大小。
textureView.setMinimumWidth(newWidth);
textureView.setMinimumHeight(newHeight);

关于可能出现什么问题或者在两个视图中更改布局/维度的可靠方式的任何想法?

2 个答案:

答案 0 :(得分:1)

  • setLayoutParams =>这将是在其父级中定位View的规范方法。
  • setMeasuredDimension =>这是从View.onMeasure使用来告诉布局系统您的特定View想要的大小。仅在您实现自己的View子类时使用。
  • setMinimumWidth/setMinimumHeight =>告诉默认的View实现View应具有的最小大小。如果您自己实施View.onMeasure,则不需要这样做。

总而言之,如果您坚持使用标准的Android框架组件,setLayoutParams应该是值得关注的地方。

答案 1 :(得分:0)

如果使用正确,并且在适当的情况下,您列出的方法都是设置尺寸的有效方法。

如果没有进一步的信息,这很难解决。

它以什么方式起作用?是导致崩溃,还是视图大小不符合您的预期?

该代码段中的代码段在哪里?我猜它是自己的一个自定义类的一部分,它扩展了ViewGroup,但是由于你是stackoverflow的新手,我们不知道你的编程经验水平。它可能在完全错误的地方,this完全引用其他一些对象。

可以建议您检查一件事:
你提到你的slave是android.view.View的子类,但这本身并不足以使用ViewGroup.LayoutParams。您需要确保您的奴隶是android.view.ViewGroup的直接或间接子类。

提供更多关于您所观察事物的代码和信息,我们会尽力为您提供帮助。


更新:
好的,所以这是一个你试图调整大小的TextureView。

我建议你在设置它的高度和宽度后检查TextureView的报告大小。您可以使用断点并运行调试,或者使用myTextureView.getWidth().getHeight(),并使用Log个参数将它们输出到LogCat。
您还可以查看与SurfaceTexture相关联的TextureView的尺寸。在SurfaceTextureListener上设置TextureView。触发此侦听器时,onSurfaceTextureAvailable()将提供SurfaceTexture的宽度和高度。

我建议您这样做,因为您可能会发现 能够更改TextureView的大小,但它是{{内容的{{>>内容 1}}这不会改变大小。在这种情况下,您可以覆盖TextureView来定义必要的转换,以便在旧尺寸和新尺寸之间扩展内容。