2016-10-12 6 views
1

Я пытаюсь загрузить простой ресурс из моего drawable. Я создал битовый массив, который имеет вытяжку в качестве источника:Xml bitmap не может быть загружен

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:gravity="center" 
    android:src="@drawable/ball"/> 

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid android:color="#FF0000"/> 
</shape> 

я загружаю с помощью этого кода: bitmapDrawable = BitmapFactory.decodeResource(context.getResources(), R.drawable.bitmap_ball);

Но они всегда возвращают null. Если bitmap xml существует и может быть выделен, в чем причина этого возвращает null?

ответ

0

Причина заключается в различии между растровыми изображениями и чертежами. Удалить файл «растровый» с

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:gravity="center" 
    android:src="@drawable/ball"/> 

содержание (оставить в вытяжке папке файл только с <shape xmlns:android... и дать им имя ball.xml), а затем добавить метод

public static Bitmap drawableToBitmap (Drawable drawable) { 
    Bitmap bitmap = null; 

    if (drawable instanceof BitmapDrawable) { 
     BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; 
     if(bitmapDrawable.getBitmap() != null) { 
      return bitmapDrawable.getBitmap(); 
     } 
    } 

    if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) { 
     bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel 
    } else { 
     bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
    } 

    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    drawable.draw(canvas); 
    return bitmap; 
} 

от this ответа и назвать это так :

Bitmap bitmapDrawable = drawableToBitmap(ContextCompat.getDrawable(this, R.drawable.ball)); 
+0

Я видел точно такой же ответ. Но я не думаю, что мне нужно выполнить эту задачу. Я проверю это. – learner

Смежные вопросы