1. 程式人生 > >VectorDrawable問題(待解決)

VectorDrawable問題(待解決)

問題一

VectorDrawable轉Bitmap報空

錯碼

BitmapFactory.decodeResource(getResources(), R.drawable.ic_marker)

分析

R.drawable.ic_marker為VectorDrawable,程式碼於4.4+正常而5.0+報空。因該法不能將VectorDrawable轉Bitmap,apk編譯時為向下相容會據VectorDrawable生相應png。4.4執行此程式碼其實用png,故5.0+錯而4.4無錯。

解決

public static Bitmap getBitmapFromVectorDrawable(Context context, int vectorDrawableId) {
    Bitmap bitmap;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { Drawable vectorDrawable = context.getDrawable(vectorDrawableId); bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap);
vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); vectorDrawable.draw(canvas); } else { bitmap = BitmapFactory.decodeResource(context.getResources(), vectorDrawableId); } return bitmap; }

問題二

Glide載入VectorDrawable不顯(待解決)

錯碼

/**
 * 資源圖載入
 *
 * @param
context * @param rId * @param pID * @param iv */
public static void displayByResource(Context context, int rId, int pID, ImageView iv) { Glide.with(context) .load(rId) .placeholder(pID) .crossFade() .diskCacheStrategy(DiskCacheStrategy.RESULT) .into(iv); }
GlideImageLoader.displayByResource(context, R.drawable.ic_add_image, R.drawable.transparent, holder.ivImageSelect);

分析

xxx

解決

換如下形式:

holder.ivImageSelect.setImageResource(R.drawable.ic_add_image);