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()));
才有效?。?!