IllegalArgumentException:width和height必须是>从View加载Bitmap时为0

时间:2013-07-12 00:17:14

标签: java canvas view bitmap imageview

我正在尝试使用ImageViewTouch,这是一个可以进行缩放缩放的库。我可以使用Canvas绘制图像,但是当我缩放图像时,绘图会消失。

为此,我正在尝试将视图转换为位图并为同一视图设置ImageBitmap。这是代码:

mImage.setDrawPath(true);
mImage.setImageBitmap(loadBitmapFromView(mImage)); 

public static Bitmap loadBitmapFromView(View v) {
        Bitmap b = Bitmap.createBitmap( v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);                
        Canvas c = new Canvas(b);
        v.layout(0, 0, v.getWidth(), v.getHeight());
        v.draw(c);
        return b;
}

当我这样做时,我收到以下日志错误:

07-11 21:13:41.567: E/AndroidRuntime(20056): java.lang.IllegalArgumentException: width and height must be > 0
07-11 21:13:41.567: E/AndroidRuntime(20056):    at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
07-11 21:13:41.567: E/AndroidRuntime(20056):    at android.graphics.Bitmap.createBitmap(Bitmap.java:620)

如果我删除loadBitmapFromView电话,图片通常会显示在图片上方。当我尝试与图像进行任何交互(如放大或缩小)时,图形会消失,只会保留背景图像,即图片。

---编辑---

这是在loadBitmapFromView调用之后放置的更多代码。案例是:我有一个无线电组听众,当我检查一些单选按钮时,我必须加载图像并在其上绘制一些可能的图纸..然后我试图将所有内容(图像和图纸)转换为仅一个位图。

这是代码中的一部分:

bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);

之后,我绘制了绘制的所有内容,并尝试使用我展示的loadImageBitmap方法将视图转换为位图。

我从Android开发者http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

上的这个链接获得的decodeSampledBitmapFromResource方法

5 个答案:

答案 0 :(得分:35)

我终于找到了解决问题的方法。

我正在使用View的post方法,该方法仅在视图测量和布局后执行,这样getWidth()getHeight()返回实际的宽度和高度。

以下是代码示例:

mImage.post(new Runnable() {
    @Override
    public void run() {
        mImage.setImageBitmap(loadBitmapFromView(mImage));
    }
});

希望它也能帮助别人:)

答案 1 :(得分:5)

如果其他一切都正确,那么您过早地执行代码。

Android尚未测量视图的布局。尝试在OnResume中执行,看看这是不是你的问题。

干杯!

答案 2 :(得分:1)

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            loadBitmapFromView(mImage);
        }
    }, 1000);

答案 3 :(得分:0)

java.lang.IllegalArgumentException: width and height must be > 0是因为Bitmap.createBitmap()来电v.getLayoutParams().widthv.getLayoutParams().height为0.可能LayoutParams错误地设置在mImage。< / p> 在使用setLayoutParams()之前,

更新mImage createBitmap()。像这样:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
mImage.setLayoutParams(layoutParams);

答案 4 :(得分:0)

在我的情况下,我忘记将orientation设置为vertical以获取父LinearLayout,并且已设置默认值horizontal,因此我设置了它并且我的问题走...

android:orientation="vertical"