2013-07-31 4 views
1

У меня есть фрагмент со следующим кодом:Android getDrawable() внутри фрагмента

final MyActivity activity = (MyActivity)getActivity(); 

, а затем немного позже:

Drawable d = (Drawable) ((Context)(activity)).getResources().getDrawable(R.drawable.marker_report_path_merge); 
Bitmap b = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
LayerDrawable ld = (LayerDrawable) ((Context)(activity)).getResources().getDrawable(R.drawable.marker_report_path_merge); 
ld.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
ld.draw(new Canvas(b)); 

Я получаю эту ошибку:

07-31 19:59:12.491: E/AndroidRuntime(14341): FATAL EXCEPTION: main 
07-31 19:59:12.491: E/AndroidRuntime(14341): android.content.res.Resources$NotFoundException: File res/drawable-hdpi/marker_report_path_merge.xml from drawable resource ID #0x7f020049 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.content.res.Resources.loadDrawable(Resources.java:1951) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.content.res.Resources.getDrawable(Resources.java:672) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at com.recntrek.util.FragmentReportUtils$2.onClick(FragmentReportUtils.java:56) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.view.View.performClick(View.java:4211) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.view.View$PerformClick.run(View.java:17267) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.os.Handler.handleCallback(Handler.java:615) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.os.Looper.loop(Looper.java:137) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.app.ActivityThread.main(ActivityThread.java:4898) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at java.lang.reflect.Method.invokeNative(Native Method) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at java.lang.reflect.Method.invoke(Method.java:511) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at dalvik.system.NativeStart.main(Native Method) 
07-31 19:59:12.491: E/AndroidRuntime(14341): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #6: <bitmap> requires a valid src attribute 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.graphics.drawable.BitmapDrawable.inflate(BitmapDrawable.java:448) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:165) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:818) 
07-31 19:59:12.491: E/AndroidRuntime(14341): at android.content.res.Resources.loadDrawable(Resources.java:1948) 
07-31 19:59:12.491: E/AndroidRuntime(14341): ... 13 more 

Но все мои ресурсы существуют!

Я пробовал очистить сборку в Eclipse, не работал.

Может ли кто-нибудь мне помочь?

Благодаря

Edit:

Вот marker_report_path_merge.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/marker_report_blue" /> 
    <item> 
     <bitmap android:src="@drawable/report_path_merge" 
       android:gravity="center_vertical|center_horizontal" /> 
    </item> 
</layer-list> 
+0

- это ваш marker_report_path_merge только png или xml? – Desert

+0

Возможно, у вас есть ресурс в res/drawable-ldpi/(или другие), но нет в res/drawable-hdpi/ –

+0

. Marker_report_path_merge - это xml-файл списка слоев. У меня есть ресурс только в res/drawable-hdpi/... – Meir

ответ

1

Причина, почему у вас была эта ошибка, потому что не было реального растрового изображения в вашем <item> теге это слой-список. Вы можете проверить этот код в BitmapDrawable класса, надуть метод

final Bitmap bitmap = BitmapFactory.decodeResource(r, id); 
if (bitmap == null) { 
    throw new XmlPullParserException(parser.getPositionDescription() + 
      ": <bitmap> requires a valid src attribute"); 
} 

Вы писали именно это исключение.

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