Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我怎样才能永远重复一次过渡?_Android_Transition - Fatal编程技术网

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

Android 我怎样才能永远重复一次过渡?,android,transition,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"/&g

我有一个这样的过渡:

<?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>
View divider = v.findViewById(R.id.divider);
if (divider != null) {
  TransitionDrawable transition = (TransitionDrawable) divider.getBackground();
  transition.startTransition(2000);
}
Timer MyTimerImage = new Timer();
我的问题是,我不知道如何永远重复这个转变,所以我可以创造一个脉冲效应

Timer MyTimerImage = new Timer();
编辑:

Timer MyTimerImage = new Timer();

要澄清的是:代码在创建视图(listitem)时执行,因此循环不是解决方案。

编辑:这是一个错误的答案,但我将保留它,以防讨论对任何人都有帮助。我可能仍然应该得到否决票,哈哈

      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
              }
          }
Timer MyTimerImage = new Timer();
可能正常工作,也可能不正常工作。我这样说是因为在2秒钟的转换过程中,while循环将继续循环,
startTransition
将被一次又一次地调用。您可以使用condiitonal语句检查当前时间,并检查上次启动时间是否小于2000

Timer MyTimerImage = new Timer();
这可能不是最好的,但是一个while循环是一个很好的开始

Timer MyTimerImage = new Timer();

如果您需要,我可以尝试给出一个更好的代码示例来更好地管理while循环,但您应该首先尝试。

我认为您应该使用AnimationDrawable而不是TransitionDrawable:

我知道这个问题很老,但我想帮助其他用户找到其他可能的解决方案

Timer MyTimerImage = new Timer();
AnimationDrawable
是两张以上图像的正确方法,但如果只有两张图像,也可以使用
TransitionDrawable
,正如您所说。我来教你怎么做

Timer MyTimerImage = new Timer();
第一次,我将在我的
onCreate()
中使用计时器

Timer MyTimerImage = new Timer();
然后,我将创建一个MyTimerTask类(在父活动类中)来运行我自己的代码

Timer MyTimerImage = new Timer();
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 MyTimerImage = new Timer();
在这种情况下,schedule方法有3个参数:第一个参数表示我们的TimerTask任务,第二个参数表示运行TimerTask的延迟(毫秒),第三个参数表示我们要运行代码的每个周期

Timer MyTimerImage = new Timer();
别忘了在
android:background
中包含TransitionFile.xml文件

Timer MyTimerImage = new Timer();

我希望它能对某人有所帮助。

循环不起作用,因为它会阻塞。此分隔符是listview中listitem的一部分。我在创建视图时执行此代码。是否尝试使用线程?这可能有点复杂,因为您无法从工作线程更新UI线程,但这可能是可行的。您还必须使用处理程序进行通信。我想我真的不知道你下一步该去哪里。我想这真的太复杂了。我想到了动画,但我在网上找不到可比的东西:/I我理解并同意。祝你好运,我想。我不知道如何使用动画或TransitionDrawable,或者我可能会提供更多帮助。对不起。:)AnimationDrawable与TransitionDrawable不同,TransitionDrawable不会在其项目之间设置动画,有什么解决方法吗?请在代码片段周围添加一些上下文,否则用户可能难以理解您的方法。
Timer MyTimerImage = new Timer();
public void repeat(){   
    new CountDownTimer(2000, 1000){

         public void onTick(long millisUntilFinished){
             transition.startTransition(2000);
        }

        public void onFinish() {
            transition.resetTransition();
            repeat();
        }
    }.start();
}