我想在Android中创建一个带有文本和背景图像的Button.背景图像应每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);
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
最后是一个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>
Run Code Online (Sandbox Code Playgroud)
现在效果是,当我启动应用程序时,会显示沙漠图像.这个图像交叉渐变到绣球花图像应该.但水母图像从未显示过.
在TransitionDrawables的文档中,声明您可以指定2个以上的drawable,但我无法使其工作.
我也试过这个没有任何XML,但在纯JAVA,但这给出了完全相同的问题:-(
根据官方文档,TransitionDrawable只能在2层之间交叉淡入淡出,引用官方的android引用.
LayerDrawables的扩展,旨在在第一层和第二层之间交叉淡入淡出.要开始转换,请调用startTransition(int).要仅显示第一层,请调用resetTransition().
如果你不仔细阅读它,因为它扩展了LayerDrawables,它可以有多个层,你可以期望你可以从N层交叉淡入淡出.但很明显,startTransition显示第二层,resetTransition显示第一层.
我建议你为多个转换做自己的实现.我要做的是拥有2张图像并制作动画.您可能需要手动设置drawable,但它应该是一段非常简单的代码.
小智 6
您可以使用处理程序来完成
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11790 次 |
| 最近记录: |