我的转换看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/divider"/>
<item android:drawable="@drawable/divider_active"/>
</transition>
和Code看起来像这样:
View divider = v.findViewById(R.id.divider);
if (divider != null) {
TransitionDrawable transition = (TransitionDrawable) divider.getBackground();
transition.startTransition(2000);
}
我的问题是,我不知道如何永远重复这种转变,所以我可以创造一个脉冲效果。
编辑:
要明确:在创建视图(listitem)时会执行代码,因此循环不是解决方案。
答案 0 :(得分:5)
我知道这个问题已经过时了,但我想帮助其他用户提供其他可能的解决方案。
当你有2张以上的图像时, AnimationDrawable
是正确的方法,但是当你只有两张图像时,你也可以使用TransitionDrawable
。我将告诉你如何做到这一点。
第一次,我会在onCreate()
中使用计时器。
Timer MyTimerImage = new Timer();
然后,我将创建一个MyTimerTask类(在父Activity类中)来运行我自己的代码。
public class MyTimerTask extends TimerTask {
LinearLayout myIDLinearLayout= (LinearLayout) findViewById(R.id.myIDofLinearLayout);
TransitionDrawable MyTrans = (TransitionDrawable) myIDLinearLayout.getBackground();
int i = 0;
@Override
public void run() {
runOnUiThread(new Runnable(){
@Override
public void run() {
i++;
if (i%2==0) { //
MyTrans.startTransition(myTransitionTimeinms);
}else{
MyTrans.reverseTransition(myTransitionTimeinms);
}
}});
}
}
最后,我将创建一个MyTimerTask变量来运行我的计时器。此代码低于Timer()的创建。
MyTimerTask MyTimer = new MyTimerTask();
MyTimerImage.schedule(MyTimer, myDelay, myPeriod);
在这种情况下,schedule方法有3个参数:第一个表示我们的TimerTask任务,第二个是以ms为单位运行TimerTask的延迟,第三个表示我们想要运行代码的每个周期。
不要忘记在您的android:background
中加入TransitionFile.xml文件。
我希望它对某人有帮助。
答案 1 :(得分:2)
public void repeat(){
new CountDownTimer(2000, 1000){
public void onTick(long millisUntilFinished){
transition.startTransition(2000);
}
public void onFinish() {
transition.resetTransition();
repeat();
}
}.start();
}
答案 2 :(得分:1)
我认为你应该使用AnimationDrawable而不是TransitionDrawable:http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
答案 3 :(得分:-3)
View divider = v.findViewById(R.id.divider);
boolean loop = true;
while (loop) {
TransitionDrawable transition = (TransitionDrawable) divider.getBackground();
transition.resetTransition(); //I don't really know if this is necessary
transition.startTransition(2000);
//you'll want to stop SOME time.
if (wantToStop){
loop = false
}
}
可能或可能不正常。我这样说是因为在2秒过渡期间,while循环将继续循环,startTransition
将再次被调用,并且再次,再次,再次被调用。您可以使用条件语句来检查当前时间并检查上次启动时间是否小于2000.
这可能不是最好的,但是while循环是一个很好的起点。
如果您需要,我可以尝试提供一个更好的代码示例来更好地管理while循环,但您应该先尝试一下。