gpt4 book ai didi

android - 如何从 TransitionDrawable 获取位图

转载 作者:行者123 更新时间:2023-11-30 03:01:06 27 4
gpt4 key购买 nike

我有一个 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,它看起来像 <item android:id="@+id/mylayerid" ...然后你会用 .findDrawableByLayerId( R.id.mylayerid ); 找到它

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

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

如果id不存在,它将被添加为具有该id的层。

希望对你有帮助

关于android - 如何从 TransitionDrawable 获取位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com