gpt4 book ai didi

android - 带有矢量可绘制对象的 TransitionDrawable

转载 作者:行者123 更新时间:2023-11-29 18:57:09 26 4
gpt4 key购买 nike

我在 xml 中定义了 TransitionDrawable,如下所示:

transition.xml

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_disabled" />
<item android:drawable="@drawable/ic_enabled" />
</transition>

我用它来动画复选框的状态变化:

val stateDrawable = ContextCompat.getDrawable(this, R.drawable.transition) as TransitionDrawable
checkbox.buttonDrawable = stateDrawable
checkbox.setOnCheckedChangeListener { icon, checked ->
if (checked) {
stateDrawable.startTransition(300)
} else {
stateDrawable.reverseTransition(300)
}
}

如果 @drawable/ic_disabled@drawable/ic_enabledpng 文件,一切正常。但如果它们是矢量可绘制对象,则过渡不起作用。我错过了什么? TransitionDrawable 不支持矢量绘图吗?

最佳答案

我知道这是旧的,但我遇到了同样的问题......在添加到 TransitionDrawable 之前,你必须将 Vector 转换为 BitmapDrawable。这是一个例子

            TransitionDrawable td = new TransitionDrawable(new Drawable[]{
getBitmapDrawableFromVectorDrawable(this, R.drawable.vector1),
getBitmapDrawableFromVectorDrawable(this, R.drawable.vector2)
});
td.setCrossFadeEnabled(true); // probably want this

// set as checkbox button drawable...

实用方法//参见 https://stackoverflow.com/a/38244327/114549

public static BitmapDrawable getBitmapDrawableFromVectorDrawable(Context context, int drawableId) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return (BitmapDrawable) ContextCompat.getDrawable(context, drawableId);
}
return new BitmapDrawable(context.getResources(), getBitmapFromVectorDrawable(context, drawableId));
}

public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
drawable = (DrawableCompat.wrap(drawable)).mutate();
}

Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);

return bitmap;
}

关于android - 带有矢量可绘制对象的 TransitionDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49777302/

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