Imageview 的最终宽度
Final width of Imageview
当我在创建 Activity
时设置 ImageView
位图。我什么时候可以读取 ImageView
的最终宽度?
似乎是在 onCreate()
方法中设置了位图,并立即分配了 965 的宽度,我在进入 ImageView
的 onLayout 方法时可以看到,然后更多layout/creation 发生并且 ImageView
宽度变为 909(我猜这是由于调整了屏幕尺寸?)。
我想做的是读取 909 的最终值以编程方式设置另一个视图的宽度。
我试过 ImageView
的 addOnGlobalLayoutListener
来尝试听布局的完成,但是阅读 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;
}
});
当我在创建 Activity
时设置 ImageView
位图。我什么时候可以读取 ImageView
的最终宽度?
似乎是在 onCreate()
方法中设置了位图,并立即分配了 965 的宽度,我在进入 ImageView
的 onLayout 方法时可以看到,然后更多layout/creation 发生并且 ImageView
宽度变为 909(我猜这是由于调整了屏幕尺寸?)。
我想做的是读取 909 的最终值以编程方式设置另一个视图的宽度。
我试过 ImageView
的 addOnGlobalLayoutListener
来尝试听布局的完成,但是阅读 ImageView
的 getMeasuredWidth()
方法仍然 returns 965 值。
布局计算完成后调用的最终事件是什么,它允许我在创建过程中设置另一个视图的宽度。
您可以在 onCreate()
完成后访问 onStart()
中的最终宽度。
您需要等待Activity
window 附加,然后获取ImageView
宽度。为此,您可以覆盖 Activity
:
@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;
}
});