我有一个我需要其位图的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的图层添加。
希望能有所帮助