setCloseButtonIcon(растровое рисование) не работает с SVG в ChromeCustomTab
Мне нужно изменить кросс-значок по умолчанию в ChromeCustomTab Android, я меняю его с помощью back-icon, используя код ниже:
Bitmap icon = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_arrow_back_white_24dp);
Он отлично работает с PNG, но не с SVG.
Согласно этой документации, мы должны поддерживать размер изображения в соответствии с этой документацией.
https://developer.android.com/reference/android/support/customtabs/CustomTabsIntent.html
Я думаю, что это не работает, потому что они не соответствуют измерениям, указанным в документации.
1 ответ
Вам необходимо вернуть действительный Bitmap
, Для VectorDrawable
нужно сделать что-то большее. Вы можете использовать эти методы:
private static Bitmap bitmapFromDrawable(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (drawable instanceof VectorDrawable) {
return bitmapFromVectorDrawable((VectorDrawable) drawable);
}
return ((BitmapDrawable) drawable).getBitmap();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static Bitmap bitmapFromVectorDrawable(VectorDrawable vectorDrawable) {
Bitmap 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);
return bitmap;
}
Тогда вы можете использовать его как:
builder.setCloseButtonIcon(bitmapFromDrawable(this, R.drawable. ic_arrow_back_white_24dp));