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

 我来答
舒适还明净的海鸥i
2022-06-02 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:70.2万
展开全部
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()));

才有效!!!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式