在运行时确定Android视图的大小

发布于 2021-01-30 22:46:18

创建活动后,我试图将动画应用于Android应用程序中的视图。为此,我需要确定视图的当前大小,然后设置动画以从当前大小缩放到新大小。这部分必须在运行时完成,因为视图会根据用户的输入缩放为不同的大小。我的布局以XML定义。

这似乎是一项容易的任务,显然有很多关于此的SO问题,尽管没有一个解决了我的问题。所以也许我缺少明显的东西。我可以通过以下方式理解我的观点:

ImageView myView = (ImageView) getWindow().findViewById(R.id.MyViewID);

这工作得很好,但打电话时getWidth()getHeight()getMeasuredWidth()getLayoutParams().width,等,他们都返回0。我也试过手动调用measure()视图上,然后到一个呼叫getMeasuredWidth(),但没有效果。

我试过调用这些方法,并在活动的onCreate()和中检查调试器中的对象onPostCreate()。如何在运行时找出该视图的确切尺寸?

关注者
0
被浏览
363
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    在视图上使用ViewTreeObserver等待第一个布局。只有在第一个布局之后,getWidth()/ getHeight()/ getMeasuredWidth()/ getMeasuredHeight()才能工作。

    ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
    if (viewTreeObserver.isAlive()) {
      viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
          view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
          viewWidth = view.getWidth();
          viewHeight = view.getHeight();
        }
      });
    }
    


  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    根据@mbaird的建议,我通过对ImageView类进行子类化和重写来找到了可行的解决方案onLayout()。然后,我创建了一个观察器接口,我的活动实现了该观察器接口,并将对自身的引用传递给该类,从而使该类可以告知活动实际何时完成大小调整。

    我不是100%确信这是最好的解决方案(因此我还没有将此答案标记为正确的答案),但是它确实有效,并且根据文档,这是人们首次找到视图的实际大小。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看