我有一个我需要Bitmap的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。
答案 0 :(得分:1)
TransitionDrawable继承自LayerDrawable,因此您可以使用findDrawableByLayerId(int id)来获取特定的drawable。
示例:使用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,它看起来像<item android:id="@+id/mylayerid" ...
,那么您会在.findDrawableByLayerId( R.id.mylayerid );
找到它
在代码中构建Transition drawable时,您需要分配每个drawable。
transitionDrawable.setDrawableBylayerId( android.R.id.background, new ColorDrawable(..) );
如果id不存在,它将被添加为具有该id的图层。
希望有所帮助