15

ボタンで翻訳アニメーションを実行しましたが、例外はすべて機能しますが、問題はアニメーションの後でボタンがクリックイベントに応答しないことだけです修正してください

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

7 に答える 7

23

これにより、オブジェクトがy方向に変換されます。

ObjectAnimator mover = ObjectAnimator.ofFloat(v, "translationY", 0, 400);
mover.start();
于 2012-05-04T06:27:56.227 に答える
21

下位レベルの API (HoneyComb より下) でアニメーションを処理している場合、アニメーションは実際にはボタンを動かさず、画像のみを動かします。クリックは、レイアウトに配置した場所と同じ場所になります。

于 2012-05-04T05:33:16.513 に答える
10

私はこの問題に直面し、ほんの数秒前に修正しました。だから、私はあなたたちと私の解決策を共有する必要があると思います。

  • アニメーションxmlファイルで、android:fillAfter="true"保持するときに削除しましたandroid:fillEnabled="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());
    

私の場合、アニメーションはlayoutContentを幅の80%左側にスライドさせます。

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

@Update:今日、Android3.0+で使用できますObjectAnimator。3.0未満のAndroid向けに開発している場合は、サポートライブラリv.4で見つけることができます。ObjectAnimatorアニメーションのベスターです。

@ Update#2:AndroidAPIの上位12バージョンでViewPropertyAnimatorを使用できます。パフォーマンスが向上し、クリックイベントの問題が修正されます。例:

mButton.animate()
                .setDuration(TIME)
                .translationY(VALUE)
                .start();
于 2012-06-13T11:11:37.453 に答える
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);
        }
    };
}
于 2012-05-04T13:45:54.477 に答える
4

アニメーションはビューの実際の位置を変更しません。fillAfter(true)を設定しても、クリックイベントを受け付ける位置は元の位置です。

于 2012-05-04T05:31:40.593 に答える
1

レイアウトでボタンの最終位置を定義し、ある位置からアニメーションを開始する簡単な解決策を見つけました。つまり、ゼロにする代わりに fromX または fromY を指定します。

于 2012-06-13T16:10:47.017 に答える
0

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

b.layout(0, -40, b.getWidth(), b.getHeight());
于 2012-05-04T06:14:04.407 に答える