我有一个我需要其位图的TransitionDrawable。当我使用getCurrent()获取其Drawable时,显然结果仍然是TransitionDrawable。但是事实是TransitionDrawable是在另一个类中使用

final TransitionDrawable td = new TransitionDrawable(new Drawable[] {
  new ColorDrawable(android.R.color.transparent), drawable });


其中drawable是BitmapDrawable。但是如果我尝试投射为

Bitmap bmp = (BitmapDrawable) transitionDrawable.getCurrent();


然后我得到一个类强制转换异常。

对于上下文,这是BitmapFun的ImageWorker的第378行中的TransitionDrawable。

最佳答案

TransitionDrawable继承自LayerDrawable,因此您可以使用findDrawableByLayerId(int id)获取特定的可绘制对象。

示例:使用来自android来源(4.4.1)的btn_toggle_bg.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background" android:drawable="@android:drawable/btn_default_small" />
<item android:id="@+android:id/toggle" android:drawable="@android:drawable/btn_toggle" />
</layer-list>


并假设它是在transitionDrawable对象中获取的:

Drawable d = transitionDrawable.findDrawableByLayerId( android.R.id.background );


背景ID是由android定义的,因此这就是R限于android的原因。如果您在自己的应用程序中创建了ID,则该ID类似于<item android:id="@+id/mylayerid" ...,然后您可以通过.findDrawableByLayerId( R.id.mylayerid );找到它

在代码中构建Transition可绘制对象时,您需要分配每个可绘制对象。

transitionDrawable.setDrawableBylayerId( android.R.id.background, new ColorDrawable(..) );


如果该ID不存在,它将作为具有该ID的图层添加。

希望能有所帮助

09-30 23:38