2011-12-20 7 views
12

私はこのように見ているの移行があります。このように見てどのようにして永久に移行を繰り返すことができますか?

<?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); 
} 

私の問題はあるが、私は永遠にこの移行を繰り返す方法がわからないので、私は作成することができます脈動効果。

編集:

物事を明確にする:ビュー(リストアイテム)を作成するときにループが何の解決策ではないので、コードは、実行されます。

答えて

-2
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ループをよりうまく管理するためのより良いコード例を提供しようとすることもできますが、まずそれを試してください。

+0

ループがブロックされているため、ループしていません。このディバイダはlistviewのlistitemの一部です。私はビューを作成するときにこのコードを実行します。 – CPlusPlus

+0

スレッドを使用してみますか?これは、UIスレッドをワーカースレッドから更新することはできないので少し複雑かもしれませんが、実行可能な可能性があります。コミュニケーションのためにハンドラも使用する必要があります。私はあなたがどこに行くべきか本当に分かっていないと思う。 – Jakar

+0

それは本当に複雑だと思います。私はアニメーションを考えましたが、Webで比較できるものは見つかりませんでした:/ – CPlusPlus

4

私はこの質問が古いであることを知っているが、私は他の可能な解決策を持つ他のユーザーを支援したいと思います。

AnimationDrawableは、2つ以上の画像がある場合は正しい方法ですが、2つの画像しかない場合はTransitionDrawableも使用できます。私はあなたにそれを行う方法を示します。

初めて、onCreate()にタイマーを使用します。

Timer MyTimerImage = new Timer(); 

次に、私自身のコードを実行するMyTimerTaskクラスを作成します。

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.reserveTransition(myTransitionTimeinms); 
       } 

      }}); 
    } 

} 

最後に、タイマーを実行するMyTimerTask変数を作成します。このコードは、Timer()の作成の下にあります。この場合

MyTimerTask MyTimer = new MyTimerTask(); 
    MyTimerImage.schedule(MyTimer, myDelay, myPeriod); 

、スケジュール方法は、3つのパラメータがあります:最初の1は、第1は、MSにTimerTaskをを実行するための遅延であり、そして三番目は、我々は、コードを実行するすべての期間を示し、私たちのTimerTaskをタスクを示します。

android:backgroundにTransitionFile.xmlファイルを含めることを忘れないでください。

私はそれが誰かに役立つことを願っています。

1
public void repeat(){ 
    new CountDownTimer(2000, 1000){ 

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

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

コードスニペットの前後にコンテキストを追加してください。そうしないと、ユーザーが自分のアプローチを理解することが難しい場合があります。 – RBT

関連する問題