0

LinearLayout があり、それに翻訳アニメーションを適用しています。前後のアニメーションを埋めています。視覚的にはうまく機能します。アニメーションは、ビューを画面外に移動して終了します。しかし、アニメーション中のある時点でビューがあった場所である画面上の x、y 座標をクリックすると、ビューのボタンでクリック リスナーが起動します。

私が見つけた唯一の解決策は、アニメーション リスナーを追加することです。アニメーションが終了したら、(現在は表示されていない) レイアウト上のボタンを visibility=gone, enabled=false にマークします。これは奇妙に思えます。ビューは画面上に表示されなくなりましたが、クリック イベントにはまだ応答しています。これは既知のことですか。アニメーションを正しく設定していない可能性がありますか?

ありがとう

- - - アップデート - - - -

アニメーションを少しリファクタリングしました。animation.setFillAfter(true) を使用する代わりに、アニメーションの完了時にレイアウトの可視性を GONE に設定します。画面外のときはクリックを登録しません。アニメーションリスナーなどを追加する必要がない方が簡単なので、これが既知のものであるかどうかを知りたい.

4

1 に答える 1

0

下位レベルの API (蜂の巣の下) のアニメーションを変換すると、ボタンが描画される場所が変更されますが、コンテナー内でボタンが物理的に存在する場所は変更されません。したがって、この状況に対処するのはあなた自身です。詳細については、このリンクを参照してください。1 つの方法は、(アニメーションではなく) レイアウト内のボタンの位置を実際に変更することです。これを達成する方法は次のとおりです。

    params = (LayoutParams) mBtn.getLayoutParams();

    TranslateAnimation animation = new TranslateAnimation(0, 0, 0, 400);
    animation.setDuration(2000);
    animation.setAnimationListener(mAnimationListener);
    mBtn.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);
    }
};

ここでは、レイアウト パラメータを変更することで、ボタンの物理的な位置を変更しています。

あなたの場合、ビューが画面から消えるので、アニメーションの終了時にボタン(View.GONE)の可視性を変更するだけです。

于 2012-09-19T05:55:26.123 に答える