2012-06-29 19 views
13

Animationを0.5秒間停止する方法はありますか?アニメーション内での遅延(TranslateAnimation)

TranslateAnimation APIを使用して無限のアニメーションを作成しようとしています。したがって、私はRepeatCountInfiniteとしています。また、アニメーションを開始するのが遅れているようなケースをカバーするsetStartOffset(...)メソッドがあることに気付きました。しかし、私はそれぞれの再起動の前に遅れを取る方法を見つけることができません。アニメーションは無限に繰り返されるので、アニメーションが再開するたびに遅れを入れなければなりません。

アイデアはありますか?

ありがとうございます!ここで

+0

多分、アニメーションを開始するスレッドに入れ、x時間だけスリープさせてから、無限にするのではなくアニメーションを開始してみてください。 – Guardanis

答えて

11

は一例であり:

最初のレイアウト(main.xml)我々はアニメートしたい画像で:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

次一つがアニメーションです。 res/animに配置され、anim_img.xmlと呼ばれます。このファイルには、android:startOffset = "500"(ミリ秒)の変換アニメーションが含まれています。これにより、アニメーションが開始するたびに使用されるオフセットが設定されます。

<?xml version="1.0" encoding="utf-8"?> 
<set> 

    <translate 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="1000" 
     android:fromXDelta="0%" 
     android:fromYDelta="0%" 
     android:toXDelta="0%" 
     android:toYDelta="100%" 
     android:zAdjustment="top" 
     android:repeatCount="infinite" 
     android:startOffset="500"/> 

</set> 

最後に重要なのはアクティビティです。これはアニメーションを開始:各間のxミリ秒の一時停止を達成するために

public class StackOverflowActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ImageView iv_icon = (ImageView) findViewById(R.id.imageView1); 

     Animation a = AnimationUtils.loadAnimation(this, R.anim.anim_img); 
     a.setFillAfter(true); 
     a.reset(); 

     iv_icon.startAnimation(a); 
    } 
} 

乾杯、 ポール

+0

ありがとう!私はそれを試み、このアプローチがうまくいったかどうかを報告します... – ymotov

9

は再起動します。

myAnimation.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationStart(Animation arg0) { 
     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      myAnimation.setStartOffset(x); 
     } 

    }); 
+0

それは素晴らしいです、ありがとう! – nurxyz

0

myanimation.setStartDelay(int型);

+0

あなたはその方法をどこで見つけましたか? – hrules6872

+1

@h_rules彼はおそらく 'setStartOffset(long)'を意味します。 –

+2

ビュー上で呼び出される必要があります。 'view.animate().setDuration(1000).setStartDelay(500);' – Yurets

関連する問題