Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Imageview:未指定测量值以计算位图尺寸_Java_Android_User Interface_Bitmap_Imageview - Fatal编程技术网

Java Android Imageview:未指定测量值以计算位图尺寸

Java Android Imageview:未指定测量值以计算位图尺寸,java,android,user-interface,bitmap,imageview,Java,Android,User Interface,Bitmap,Imageview,谷歌建议从缩小的资源中加载位图,具体取决于实际的ImageView大小(《谷歌开发者指南》中的“高效加载大型位图”)。因此,在解码位图之前,我必须知道ImageView的宽度和高度 我的代码与下面发布的代码类似decodeSampledBitmapFromResources将位图作为存储在资源中的位图的缩小版本返回 public void onCreate(Bundle savedInstanceSate) { super.onCreate(savedInstanceState);

谷歌建议从缩小的资源中加载位图,具体取决于实际的ImageView大小(《谷歌开发者指南》中的“高效加载大型位图”)。因此,在解码位图之前,我必须知道ImageView的宽度和高度

我的代码与下面发布的代码类似
decodeSampledBitmapFromResources
将位图作为存储在资源中的位图的缩小版本返回

public void onCreate(Bundle savedInstanceSate)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout)

    ImageView imageView = (ImageView) findViewById(R.id.myImageView);

    /**
    At this point, I need to calculate width and height of the ImageView.
    **/

    Bitmap bitmap = MyBitmapManager.decodeSampledBitmapFromResource(
                        getResources(), R.drawable.my_icon, width, height);
    imageView.setImageBitmap(bitmap);
}
问题是,在onCreate中,ImageView还没有任何宽度和高度。getWidth()和getHeight()仅返回0。在实际绘制视图之前,我无意中发现了计算视图大小的代码:

ImageView v = findViewById(R.id.myImageView);
v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
int width = v.getMeasuredWidth();
int height = v.getMeasuredHeight();
这适合我的情况吗?我试过了,上面的代码返回了一些宽度和高度的值,这些值似乎是正确的,但我不确定这是否是正确的方法

更新: 经过更多的测试,这似乎不起作用。 在上面的例子中,我使用了一个192x192像素的PNG。 在如上所示测量ImageView之后,我得到了128x128的测量尺寸。 如果在位图设置为imageview后调用getWidth()和getHeight(),则尺寸为100x100。 因此,在这种情况下,映像将从192x192缩小到128x128,但不会像它应该的那样缩小到100x100

似乎
Measurespec.UNSPECIFIED
总是返回大于末尾的维度

提前感谢,


danijoo

我自己解决了这个问题:

ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw(){
        // at this point, true width and height are already determined
        int width = imageView.getMeasuredWidth();
        int height = imageView.getMeasuredHeight();

        Bitmap bitmap = MyBitmapManager.decodeSampledBitmapFromResource(
                        getResources(), R.drawable.my_icon, width, height);
        imageView.setImageBitmap(bitmap);

        // this is important because onPreDrawn is fired multiple times
        imageView.getViewTreeObserver().removeOnPreDrawListener(this);
        return true;
    }
}