web-dev-qa-db-ja.com

android)のanimationSet()を使用したアニメーション

OK、これが私のアクティビティにImageViewがある問題です。main.xmlでの表示は次のとおりです。

<ImageView  
Android:id="@+id/ic"
Android:layout_width="wrap_content" 
Android:layout_height="wrap_content" 
Android:src="@drawable/icon"
Android:layout_gravity="center_horizontal"/>

この画像を-200(左)、次に100(右)に移動してから、バウンス効果で0に戻します。

私はこれを私のコードで実装しました:

as = new AnimationSet(true);
as.setFillEnabled(true);
as.setInterpolator(new BounceInterpolator());

TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); 
ta.setDuration(2000);
as.addAnimation(ta);

AnimationSet sa = new AnimationSet(true);
sa.setFillEnabled(true);
sa.setInterpolator(new DecelerateInterpolator());

TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); 
ta2.setDuration(2000);
sa.addAnimation(ta2);

as.addAnimation(sa);

コードで、必要なX遷移(-300,100)、次に(100、0)を確認できます。

ただし、画像は本来のように移動せず、100で停止してからバウンドします...

うーん....、あなたたちは何が間違っているのか、これを達成するために私は何をすべきか知っていますか?

12
user724861

私が間違えていなければ、あなたは一連のアニメーションを撮影しています。

興味深いことに、AnimationSetを開始すると、追加されたすべてのアニメーションが順番にではなく同時に実行されます。したがって、最初のアニメーションに続くアニメーションごとにsetStartOffset(long offSet)を実行する必要があります。

多分このようなものがうまくいくでしょう...

as = new AnimationSet(true);
as.setFillEnabled(true);
as.setInterpolator(new BounceInterpolator());

TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); 
ta.setDuration(2000);
as.addAnimation(ta);

TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); 
ta2.setDuration(2000);
ta2.setStartOffset(2000); // allowing 2000 milliseconds for ta to finish
as.addAnimation(ta2);
30
serkanozel

ObjectAnimatorを使用することをお勧めします。ケースを実装するのは非常に簡単です。アニメーションは次のようになります。

ObjectAnimator animator1 = ObjectAnimator.ofFloat(targetView, "translationX", -200f);
animator1.setRepeatCount(0);
animator1.setDuration(1000);

ObjectAnimator animator2 = ObjectAnimator.ofFloat(targetView, "translationX", 100f);
animator2.setRepeatCount(0);
animator2.setDuration(1000);

ObjectAnimator animator3 = ObjectAnimator.ofFloat(targetView, "translationX", 0f);
animator3.setRepeatCount(0);
animator3.setDuration(1000);

//sequencial animation
AnimatorSet set = new AnimatorSet();
set.play(animator1).before(animator2);
set.play(animator2).before(animator3);
set.start();

ObjectAnimatorに慣れていない場合は、次のことを確認できますAndroidチュートリアルの例:

Android Viewアニメーションの例

16
James

このようなことは、3.0以降では非常に簡単です。これは私が似たようなことを達成するために使用した2つのリンクです。

http://Android-developers.blogspot.com/2011/02/animation-in-honeycomb.html

http://developer.Android.com/reference/Android/animation/AnimatorSet.Builder.html

2