【发布时间】:2013-07-10 11:28:42
【问题描述】:
我正在开发一个在一堆图像上画线的应用程序。为了选择这些图像,我有一个单选组,每当用户单击单选按钮时,图像都会加载所有自己的绘图。
在我的收音机监听器中,我有以下代码:
bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);
mImage.setDrawLines(true);
mImage.setImageBitmap(loadBitmapFromView(mImage));
decodeSampledBitmapFromResource 方法我从这个关于 android 开发者的链接获得(它更有效地加载位图)http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
这是我用来获取视图位图的方法
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
return b;
}
我正在设置mImage 的图像位图,因为我使用的是 ImageViewTouch 库(它可以在 ImageView 上进行缩放),如果我不这样做,所有的画布绘图都会被删除图像(如放大/缩小)。
错误日志如下
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)
我几乎可以肯定这个错误正在发生,因为当我调用getBitmapFromView 方法时,图像位图没有完全加载。
我如何知道视图何时完全加载?
【问题讨论】:
-
嗯,我不明白,你会在你的代码中再次为我解释一下吗?你第一次设置了ImageBitmap。为什么要第二次设置它并从视图中加载和高度?
-
第一次是加载图片干净(没有任何图纸)。然后我通过调用 setDrawLines 在图像上绘制线条。一旦在 Canvas 上绘制图纸,我必须创建一个独特的图像 + 图纸图像。所以我第二次调用 imageBitmap,但这次,我必须从视图中获取位图(因为视图有图纸)..这样我把它们放在一起
-
看来这个stackoverflow.com/questions/8831642/…会是你想要的更多。
-
这个问题询问关于在图像上绘制线条的问题。我可以正常绘制它们,问题是更改位图并在之后绘制线条.. 位图似乎没有及时加载
-
看来你已经覆盖了 ImageView 对吧?如何在 onDraw 添加触发以知道何时绘制。好问题,我也很想知道答案
标签: android bitmap imageview android-canvas