2017-08-15 12 views
1

私は他の質問を参照しましたが、解決策を見つけることができませんでした。TranslateAnimationの後の位置に永続的にImageViewを設定する方法

ImageViewでTranslateAnimationを実装しましたが、アニメーションが終了すると元の位置に戻ります。 Override onAnimationEndを使用しましたが、うまくいかないようです。誰かが私は何をしなければならないのか理解できますか?

public class PackAnimation extends AppCompatActivity { 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pack_animation); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    String s = getIntent().getStringExtra("CHOICE"); 


    final ImageView pandya = (ImageView) findViewById(R.id.pandya); 

    final int amountToMoveRight = 600; 
    final int amountToMoveDown = 0; 

    TranslateAnimation anim = new TranslateAnimation(0, amountToMoveRight, 0, amountToMoveDown); 
    anim.setDuration(100); 

    anim.setAnimationListener(new TranslateAnimation.AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { } 

     @Override 
     public void onAnimationRepeat(Animation animation) { } 

     @Override 
     public void onAnimationEnd(Animation animation) 
     { 
      RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)pandya.getLayoutParams(); 
      params.topMargin += amountToMoveDown; 
      params.leftMargin += amountToMoveRight; 
      pandya.setLayoutParams(params); 
     } 
    }); 

    pandya.startAnimation(anim); 
} 

} 

答えて

0

あなたはTranslateAnimationからanim.setFillAfter(true)を使用して、新しい位置にボタンの滞在を得るが、ボタンのクリックは、新しい位置に動作しませんすることができます。

ViewPropertyAnimatorまたはObjectAnimatorを使用してください。これらはプロパティアニメーションであり、TranslateAnimationはビューアニメーションで、ビューの実際のプロパティは変更されませんが、Viewの位置が変更されます。

pandya.animate() 
    .translationX(amountToMoveRight) 
    .translationY(amountToMoveDown); 

は、詳細はblogを参照してください:

は最後に、前のアニメーションが 対象物の外観を変更...しかし、彼らはdidnのViewPropertyAnimatorを使用して例えば

、実際にオブジェクト を変更していません。この問題が発生している可能性があります。 ボタンを画面の一方の側から他方の側に移動したいとします。 TranslateAnimationを使用すると、 に沿ってボタンが画面の反対側に喜んで滑りますアニメーションが完了すると、 は喜んで元の位置に戻ってきます。アニメーションで setFillAfter(true)メソッドを見つけてもう一度やり直してください。今回は、 ボタンは、アニメートされた場所の所定の位置にとどまります。 あなたはそれをクリックすることで確認できます - Hey!どのようにボタンが をクリックしていないのですか?問題は、ボタン が描画された場所でアニメーションが変更され、ボタンが物理的に コンテナ内に存在しない場所では変化しないということです。ボタンをクリックしたい場合は、それまでに使用していた場所の をクリックする必要があります。または、より効果的な解決方法として (さらに便利なもの)を使用すると、アニメーションが終了すると というレイアウトでボタンの位置を実際に変更するコードを と書くことができます。

+0

ViewPropertyAnimatorについて言及してくれてありがとう、私が働いている文脈では、これが最良のアプローチだと思う。 –

+0

お寄せください。 :) – Bob

0

anim.setFillAfter(true);を使用してください。アニメーションの終了後、最終位置に残ります。

関連する問題