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()));

才有效!!!

你可能感兴趣的:(Drawable和Bitmap无法绘制的几个问题)