android png图片转为bitmap设置给imageView后,从imageView中作为drawable取出,再调用Drawable.draw(Canvas canvas)将其绘制,透明部分全变成了黑色,如何保留透明度?
时间: 2023-08-07 08:04:16 浏览: 184
在将PNG图片转为Bitmap时,需要使用ARGB_8888或者RGBA_8888格式。其中ARGB_8888格式可以保留图片的透明度。在设置给ImageView时,需要设置ImageView的scaleType为CENTER_INSIDE或FIT_CENTER,这样可以保证图片完整地显示在ImageView中。
在从ImageView中取出Drawable后,可以通过设置Paint的Xfermode来保留透明度。具体做法是,在绘制之前,先设置Paint的Xfermode为PorterDuff.Mode.SRC_OVER,这样就可以保留图片的透明度。示例代码如下:
```java
// 将PNG图片转为Bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test, new BitmapFactory.Options());
// 将Bitmap设置给ImageView
imageView.setImageBitmap(bitmap);
// 从ImageView中取出Drawable
Drawable drawable = imageView.getDrawable();
// 创建画布
Canvas canvas = new Canvas(bitmap);
// 创建画笔
Paint paint = new Paint();
// 设置Xfermode为SRC_OVER
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
// 绘制Drawable
drawable.draw(canvas);
```
这样,绘制出来的图片就可以保留透明度了。
阅读全文