2012-05-04 10 views
11

翻訳アニメーション、すべての作業の後にイベントをクリックして応答していないが、唯一の問題は、アニメーションの後にボタンが私にボタンは、私がボタンの翻訳アニメーションを実行した

Button b=(Button)findViewById(R.id.button1); 
    TranslateAnimation slide=new TranslateAnimation(0, 30, 0,-40); 
    slide.setDuration(500); 
    slide.setZAdjustment(TranslateAnimation.ZORDER_TOP); 
    slide.setFillAfter(true); 

    b.startAnimation(slide); 
を修正してくださいイベントをクリックして応答していません
+0

が思えるよう代わりに置くことfromXまたはfromYを指定すなわち、レイアウトのボタン最終的な位置を定義し、いくつかの位置からアニメーションを開始、あなたが追加することを忘れましたリスナーからボタンへ – RobinHood

答えて

20

下位レベルのAPI(HoneyCombの下)でアニメーションを処理している場合、アニメーションは実際にボタンを移動するのではなく、画像のみを移動します。そのクリックはレイアウトに配置した場所と同じ場所にあります。これは、Y方向にオブジェクトを移動します

b.layout(0, -40, b.getWidth(), b.getHeight()); 
+1

http://android-developers.blogspot.in/2011/02/animation-in-honeycomb。html –

+0

:翻訳後、どのようにボタン位置を変更できますか?現在、アニメーションリスナーを設定しています。アニメーション終了コールバックでlayoutparamを使用して設定しましたが、問題は解決しません。 – Bytecode

+0

アニメーションが完了しました新しいボタンを動的に作成してその位置に追加し、ボタンの表示をview.goneに変更する必要があります。 –

4

アニメーションでViewの実際の位置が変更されません。 setfillAfter(true)を指定しても、クリックイベントを受け付けることができる位置が元の位置になります。

0

はこれを使用してみてください

ObjectAnimator mover = ObjectAnimator.ofFloat(v, "translationY", 0, 400); 
mover.start(); 
21

+0

AnimatorSetを使用して、アニメーションの平行移動をx方向とy方向に組み合わせることもできます。 –

+1

はHoneyCombで動作していません – Bytecode

+0

あなたは私の一日の男を作った –

5

私は、あなたが望むものを達成できていますが、手動で座標を管理しています。 それがあなたに適しているかどうかを確認してください。

public class AnimationTestActivity extends Activity { 

    private Button mButton; 

    private LinearLayout.LayoutParams params; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mButton = (Button) findViewById(R.id.button); 
     mButton.setOnClickListener(mClickListener); 

     params = (LayoutParams) mButton.getLayoutParams(); 
    } 

    private android.view.View.OnClickListener mClickListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      TranslateAnimation animation = new TranslateAnimation(0, 0, 0, 400); 
      animation.setDuration(2000); 
      animation.setAnimationListener(mAnimationListener); 
      v.startAnimation(animation); 
     } 
    }; 

    private AnimationListener mAnimationListener = new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      params.topMargin = params.topMargin + 400; 
      mButton.setLayoutParams(params); 
     } 
    }; 
} 
+0

こんにちは@Sushil、あなたのソリューションは実際には、両方の表示/非表示のアニメーションのために、私のために実際に動作しますが、私は見ることができますビューは、アニメーションが終了し、新しいポジションであなたもこれを観察しましたか? – mdelolmo

5

私はこの問題に直面しましたが、私はちょっと前に修正しました。だから私はあなたと私の解決策を共有すべきだと思う。アニメーションのXMLファイルに

  • android:fillEnabled="true"を維持するとき、私はandroid:fillAfter="true"を削除しました。

  • 登録アニメーションリスナー、そしてonAnimationEnd()方法では、私は、ビューの位置を変更するView#Layout()を呼び出します。私の場合は

   int newLeft = (int) (layoutContent.getLeft() + layoutContent.getWidth() * 0.8); 
       layoutContent.layout(newLeft, 
            layoutContent.getTop(), 
            newLeft + layoutContent.getMeasuredWidth(), 
            layoutContent.getTop() + layoutContent.getMeasuredHeight()); 
は、アニメーションが何の幅の80%を左側するlayoutContentをスライドことです。

正常に動作します。お役に立てれば。

@アップデート:今日、アンドロイド3.0+ではObjectAnimatorを使用できます。 Android 3.0のために開発している場合は、サポートライブラリv.4で見つけることができます。 ObjectAnimatorはアニメーション用のベスターです。

@更新#2:あなたはandroid api higher 12バージョンでViewPropertyAnimatorを使用できます。 パフォーマンスが向上し、クリックイベントの問題を修正しました。例:

mButton.animate() 
       .setDuration(TIME) 
       .translationY(VALUE) 
       .start(); 
+1

ObjectAnimatorがサポートライブラリに存在しません!! – amiekuser

+0

「アニメーションXMLファイルでは、android:fillAfter = "true" android:fillEnabled = "true"」を削除しました。「 – Mazino

0

私は簡単な解決策はゼロ

+0

これは受け入れられない回答でしょうか?あなた自身の答えも受け入れることができます。 – Talha

関連する問題