我有一个ImageView,其layout_width为fill_parent
。我想获得此ImageView的宽度,以便计算缩略图的大小。问题是imageView.getWidth()
和imageView.getHeight()
都返回0,因为布局尚未设置。
我的问题是,ImageView是否有某种SizeChanged事件或类似的东西?一旦ImageView宽度建立,我该如何反应?
更新
我以这种方式解决了我的问题。因为我实际上只需要设置为fill_parent的ImageView的宽度,我实际需要的是device window size:DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int targetW = metrics.widthPixels;
答案 0 :(得分:1)
您可以使用ViewTreeObserver
挂钩到许多View树事件。具体来说,OnGlobalLayoutListener
或OnPreDrawListener
应该适合您,具体取决于您对尺寸的处理方式。
以下是使用ViewTreeObserver
获取视图宽度的示例:
final ImageView myImageView = (ImageView) findViewById(R.id.image);
final ViewTreeObserver observer = myImageView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = myImageView.getHeight();
// Do something with the height
// Remove the layout listener so we don't waste time on future passes
observer.removeOnGlobalLayoutListener(this);
}
});
答案 1 :(得分:0)
根据这篇文章的回答:
ImageView.getWidth() returns 0
您需要通过以下功能调用它:
public void onWindowFocusChanged(boolean hasFocus)
这是因为窗口尚未附加,因为您注意到您的imageview尚无尺寸。