Drawable和Bitmap無(wú)法繪制的幾個(gè)問(wèn)題

1.canvas.drawBitmap無(wú)法繪制或繪制空白的問(wèn)題:

? ? 通過(guò)自定義屬性獲取的圖片資源一般為Drawable,需要使用該方法繪制時(shí)需要將Drawable轉(zhuǎn)換為Bitmap,但是這里轉(zhuǎn)換為bitmap有幾個(gè)坑:

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

這個(gè)轉(zhuǎn)換無(wú)效繪制圖片無(wú)法展示。

第二,當(dāng)圖片資源設(shè)置為AdaptiveIconDrawable時(shí),即app的icon資源時(shí),無(wú)法繪制。

正確的轉(zhuǎn)換方法為:

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.通過(guò)Drawable.draw()方法繪制圖片為空白,當(dāng)使用Drawable的draw繪制時(shí)一定要加上這句話:

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

才有效?。?!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容