Fel*_*sso 27 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;
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下日志错误:
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)
Run Code Online (Sandbox Code Playgroud)
如果我删除了loadBitmapFromView呼叫,则图形通常会出现在图像上方.当我尝试与图像进行任何交互(如放大或缩小)时,绘图消失,仅保留背景图像,即图片.
---编辑---
这是在loadBitmapFromView通话后放置的更多代码.案例是:我有一个无线电组听众,当我检查一些单选按钮时,我必须加载图像并在其上绘制一些可能的图纸..然后我试图将所有内容(图像和图纸)转换为仅一个位图.
这是代码的一部分:
bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)
之后,我绘制了我必须绘制的所有内容,并尝试使用我展示的loadImageBitmap方法将视图转换为位图.
decodeSampledBitmapFromResource我从Android开发人员的这个链接获得的方法http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
Fel*_*sso 37
我终于找到了解决问题的方法.
我正在使用postView 的方法,它将仅在视图测量和布局之后执行,这样getWidth()并getHeight()返回实际的宽度和高度.
这是代码示例:
mImage.post(new Runnable() {
@Override
public void run() {
mImage.setImageBitmap(loadBitmapFromView(mImage));
}
});
Run Code Online (Sandbox Code Playgroud)
希望它也能帮助别人:)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
loadBitmapFromView(mImage);
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36430 次 |
| 最近记录: |