我怎样才能永远重复过渡?

时间:2011-12-20 21:48:00

标签: android transition

我的转换看起来像这样:

<?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)时会执行代码,因此循环不是解决方案。

4 个答案:

答案 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循环,但您应该先尝试一下。

相关问题