gpt4 book ai didi

java - 具有多个项目的 Android TransitionDrawable

转载 作者:可可西里 更新时间:2023-11-01 19:05:35 25 4
gpt4 key购买 nike

我想在 Android 中创建一个带有文本和背景图像的按钮。背景图像应该每隔 X 次淡入淡出。

我使用带有 2 个图像的 TransitionDrawable 来完成这项工作。

但我无法让它处理超过 2 张图像。

我有什么:

在 Java 代码中,我创建了一个 Button 并设置了一个背景(这是一个在 XML 中定义的 TransitionDrawable)。然后我开始过渡。

final Button b = new Button(getApplicationContext());
b.setTextColor(getResources().getColor(R.color.white));
b.setText("Some text");
b.setBackgroundDrawable(getResources().getDrawable(R.drawable.tile));
StateListDrawable background = (StateListDrawable) b.getBackground();
TransitionDrawable td = (TransitionDrawable) background.getCurrent();
td.startTransition(2000);

在 XML 中我在 tile.xml 中定义

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<solid
android:color="#449def" />
</shape>
</item>
<item android:drawable="@drawable/transition">
<shape>
<solid
android:color="#0000ff" />
</shape>
</item>
</selector>

最后是 transition.xml

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/desert"/>
<item android:drawable="@drawable/hydrangeas" />
<item android:drawable="@drawable/jellyfish" />
</transition>

现在的效果是,当我启动应用程序时,会显示沙漠图像。此图像应与绣球花图像交叉淡入淡出。但从未显示水母图像。

在 TransitionDrawables 的文档中声明您可以指定超过 2 个可绘制对象,但我无法让它工作。

我也尝试过在没有任何 XML 的情况下使用纯 JAVA 但这给出了完全相同的问题:-(

最佳答案

你可以使用处理程序来完成

mAnimateImage is your button

int DrawableImage[] = {R.drawable.back_red, R.drawable.back_green, R.drawable.back_purple};

final Handler handler = new Handler();
final int[] i = {0};
final int[] j = {1};
handler.postDelayed(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Resources res = getApplicationContext().getResources();
TransitionDrawable out = new TransitionDrawable(new Drawable[]{res.getDrawable(DrawableImage[i[0]]), res.getDrawable(DrawableImage[j[0]])});
out.setCrossFadeEnabled(true);
mAnimateImage.setBackgroundDrawable(out);
out.startTransition(4000);
i[0]++;
j[0]++;
if (j[0] == DrawableImage.length) {
j[0] = 0;
}
if (i[0] == DrawableImage.length) {
i[0] = 0;
}
handler.postDelayed(this, 8000);
}
});
}
}, 0);

关于java - 具有多个项目的 Android TransitionDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15656828/

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