web-dev-qa-db-ja.com

アニメーション内の遅延(TranslateAnimation)

Animationを0.5秒間一時停止する方法はありますか?

TranslateAnimationAPIを使用して無限のアニメーションを作成しようとしています。したがって、私はRepeatCountInfiniteとして使用します。また、アニメーションの開始を遅らせたい場合をカバーするsetStartOffset(...)メソッドがあることに気づきました。ただし、各「再起動」の前に遅延を発生させる方法が見つかりません。アニメーションは無限に発生するので、アニメーションが再開するたびに遅延を入れる必要があります。

何か案は?

ありがとう!

15
ymotov

ここに例があります:

まず、アニメーション化する画像を含むレイアウト(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>

そして最後になりましたが、アクティビティです。アニメーションを開始します:

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

乾杯、ポール

12
Spipau

各再起動の間にxミリ秒の一時停止を実現するには:

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

    });
9
Paola G

myanimation.setStartDelay(int);

0
Drx