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で停止してからバウンドします...
うーん....、あなたたちは何が間違っているのか、これを達成するために私は何をすべきか知っていますか?
私が間違えていなければ、あなたは一連のアニメーションを撮影しています。
興味深いことに、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);
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チュートリアルの例:
このようなことは、3.0以降では非常に簡単です。これは私が似たようなことを達成するために使用した2つのリンクです。
http://Android-developers.blogspot.com/2011/02/animation-in-honeycomb.html
http://developer.Android.com/reference/Android/animation/AnimatorSet.Builder.html