VectorDrawable問題(待解決)
阿新 • • 發佈:2019-02-05
問題一
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);