Как получить растровое изображение из drawable, определенного в xml?
Как получить растровое изображение из xml-формы.
Что я делаю неправильно?
shadow.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
android:angle="270.0"
android:endColor="@android:color/transparent"
android:startColor="#33000000"
android:type="linear" />
<size android:height="7.0dip" />
</shape>
Мой метод для получения растрового изображения из drawable:
private Bitmap getBitmap(int id) {
return BitmapFactory.decodeResource(getContext().getResources(), id);
}
getBitmap() возвращает значение null, когда идентификатор передается, является shadow.xml идентификатором.
Ответы
Ответ 1
У ShapeDrawable нет связанного с ним растрового изображения - его единственная цель - рисовать на холсте. Пока не будет выведен метод его рисования, он не имеет изображения. Если вы можете получить элемент холста в том месте, где вам нужно нарисовать тень, вы можете нарисовать его как shapeDrawable, иначе вам может понадобиться отдельный пустой вид в вашем макете с тенью в качестве фона.
Ответ 2
Это полнофункциональное рабочее решение :
private Bitmap getBitmap(int drawableRes) {
Drawable drawable = getResources().getDrawable(drawableRes);
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
И вот пример:
Bitmap drawableBitmap = getBitmap(R.drawable.circle_shape);
circle_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="15dp"
android:height="15dp" />
<solid
android:color="#94f5b6" />
<stroke
android:width="2dp"
android:color="#487b5a"/>
</shape>
Ответ 3
Вы должны добавить атрибут размера в свою форму, чтобы предотвратить "java.lang.IllegalArgumentException: ширина и высота должны быть > 0".
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/colorAccent" />
<stroke
android:width="1.3dp"
android:color="@color/white" />
<size android:height="24dp" android:width="24dp"/>
</shape>