Drawable和Bitmap无法绘制的几个问题

1.canvas.drawBitmap无法绘制或绘制空白的问题:

    通过自定义属性获取的图片资源一般为Drawable,需要使用该方法绘制时需要将Drawable转换为Bitmap,但是这里转换为bitmap有几个坑:

    第一,mBitmap = Bitmap.createBitmap(imgRes.getIntrinsicWidth(), imgRes.getIntrinsicHeight(),imgRes.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);

这个转换无效绘制图片无法展示。

第二,当图片资源设置为AdaptiveIconDrawable时,即app的icon资源时,无法绘制。

正确的转换方法为:

private BitmapgetmBitmap(Drawable drawable) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

if (drawableinstanceof BitmapDrawable) {

return ((BitmapDrawable) drawable).getBitmap();

        }else if (drawableinstanceof AdaptiveIconDrawable) {

Drawable[] drr =new Drawable[2];

            drr[0] = ((AdaptiveIconDrawable) drawable).getBackground();

            drr[1] = ((AdaptiveIconDrawable) drawable).getForeground();

            LayerDrawable layerDrawable =new LayerDrawable(drr);

            int width = layerDrawable.getIntrinsicWidth();

            int height = layerDrawable.getIntrinsicHeight();

            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

            Canvas canvas =new Canvas(bitmap);

            layerDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());

            layerDrawable.draw(canvas);

            return bitmap;

        }

}else {

return ((BitmapDrawable) drawable).getBitmap();

    }

return null;

}

2.通过Drawable.draw()方法绘制图片为空白,当使用Drawable的draw绘制时一定要加上这句话:

imgRes.setBounds(new Rect(0,0,imgRes.getIntrinsicWidth(),imgRes.getIntrinsicHeight()));

才有效!!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容