在设置位图之前获取ImageView宽度和高度

时间:2014-09-05 14:40:17

标签: android imageview out-of-memory

我的布局中有一个操作栏,文本视图和一个imageview。 Imageview有widht和height match_parent。 Imageview占用视图中剩余的剩余空间。我想为视图设置一个位图,但这太大了。所以我首先要获取imageview的宽度和高度,然后使用它们缩小位图,然后将其设置为imageview。我已经尝试在OnCreate中获取imageview的宽度和高度,但这可能是0,0可能是因为还没有创建imageview。

请建议怎么做?

感谢。

3 个答案:

答案 0 :(得分:1)

你需要使用ViewTreeObserver onPreDrawListener,这是在测量完所有内容之后调用的,并且在它被绘制之前被调用

ImageView iv = (ImageView)findViewBYId(R.id.imageview);
ViewTreeObserver observer = iv.getViewTreeObserver()
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

    public boolean onPreDraw(){
        observer.removeOnPreDrawListener(this);
        //do your stuff here
    }
}

答案 1 :(得分:0)

如果您只对特定ImageView的布局更改感兴趣,那么就可以采用布局监听器:

imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        // do stuff
    }
});

答案 2 :(得分:-1)

您是否尝试过此链接?

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html#load-bitmap

基本上存在这样一种方法,特别是用于防止因大位图而导致的内存问题。您首先阅读尺寸,然后填写缩放样本。