Вопрос по android – Как получить растровое изображение из отрисовки, определенной в XML?

35

Как я могу получить растровое изображение из 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 () возвращает ноль, когда переданный идентификатор являетсяshadow.xml идентификатор для рисования

Ваш Ответ

3   ответа
48

working solution:

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>
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededContextCompat.getDrawable(context, drawableRes);Error: User Rate Limit Exceededsupport-v4 library developer.android.com/topic/libraries/support-library/….
1

отвращения & quot; java.lang.IllegalArgumentException: ширина и высота должны быть & gt; 0 & Quot ;.

<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>
14

связанного с ним - его единственная цель - рисовать на холсте. Пока метод рисования не вызван, у него нет изображения. Если вы можете получить элемент canvas в том месте, где вам нужно нарисовать тень, вы можете нарисовать его как shapeDrawable, в противном случае вам может понадобиться отдельный пустой вид в макете с тенью в качестве фона.

Error: User Rate Limit Exceeded kaneda
Error: User Rate Limit ExceededDrawable d = getContext().getResources().getDrawable(R.drawable.id); d.draw(canvas);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded kaneda

Похожие вопросы