Imageview 的最终宽度

Final width of Imageview

当我在创建 Activity 时设置 ImageView 位图。我什么时候可以读取 ImageView 的最终宽度?

似乎是在 onCreate() 方法中设置了位图,并立即分配了 965 的宽度,我在进入 ImageView 的 onLayout 方法时可以看到,然后更多layout/creation 发生并且 ImageView 宽度变为 909(我猜这是由于调整了屏幕尺寸?)。

我想做的是读取 909 的最终值以编程方式设置另一个视图的宽度。

我试过 ImageViewaddOnGlobalLayoutListener 来尝试听布局的完成,但是阅读 ImageView 的 getMeasuredWidth() 方法仍然 returns 965 值。

布局计算完成后调用的最终事件是什么,它允许我在创建过程中设置另一个视图的宽度。

您可以在 onCreate() 完成后访问 onStart() 中的最终宽度。

您需要等待Activity window 附加,然后获取ImageView 宽度。为此,您可以覆盖 Activity:

onWindowFocusChanged() 方法
@Override
public void onWindowFocusChanged(boolean hasFocus){
    int imageWidth = yourImageView.getWidth();
}

作为第二个建议:

您还可以添加一个OnPreDrawListener and use his onPreDraw()方法

At this point, all views in the tree have been measured and given a frame

 ViewTreeObserver vto = yourImageView.getViewTreeObserver();
 vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {
           int imageWidth = yourImageView.getMeasuredWidth();
           return true;
        }
    });