Android ImageView某种大小改变了事件?

时间:2015-03-24 16:14:05

标签: android android-imageview

我有一个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;

2 个答案:

答案 0 :(得分:1)

您可以使用ViewTreeObserver挂钩到许多View树事件。具体来说,OnGlobalLayoutListenerOnPreDrawListener应该适合您,具体取决于您对尺寸的处理方式。

以下是使用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尚无尺寸。