1

私は次のコードに取り組んでいます

    Animation animation1= new TranslateAnimation(0,0,0,-250);
    animation1.setDuration(1000);
  animation1.setFillAfter(true);
     rom.startAnimation(animation1);

翻訳は正常に機能していますが、この翻訳後に clicklistener を使用できませんでした。それを使用することは可能ですか。誰か助けてください。

4

1 に答える 1

0

アニメーションを実行する前に、アニメーション自体で setFillAfter(true) を呼び出すことができます。これにより、アニメーションの完了後に新しい座標がビューに適用されます。

anim.setFillAfter(true);
viewToAnimate.startAnimation(anim);

それでもうまくいかない場合は、アニメーションが完了したときに、ビューにマージンを設定してみてください。AnimationListener を作成し、アニメーションに設定します。次に、onComplete メソッドでマージンを使用してビューの位置を変更します。

final View viewToAnimate = ...;
final int finalX = ...;
final int finalY = ...;

anim.setAnimationListener(new AnimationListener()
            {

            public void onAnimationStart(Animation animation)
            { 
            }

            public void onAnimationRepeat(Animation animation)
            {
            }

            public void onAnimationEnd(Animation animation)
            {
                FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(getLayoutParams());
                lp.setMargins(finalX, finalY, 0, 0);
                viewToAnimate.setLayoutParams(lp);
                viewToAnimate.requestLayout();
            }
        });
viewToAnimate.startAnimation(anim);

上記のコードは、ビューが FrameLayout 内に含まれていることを前提としています (したがって、FrameLayout.LayoutParams コード)

アニメーションが完了したら、新しい座標でビューを再度レイアウトすることもできます。

viewToAnimate.layout(finalX, finalY, finalX + viewWidth, finalY + viewHeight);
viewToAnimate.requestLayout();

これらの 3 つの方法をそれぞれ試して、どれが効果的かを確認してください。setFillAfter(true) メソッドが最も簡単に機能することを願っています。

編集: おっと- setFillAfter を既に呼び出していることに気づきませんでした。それはうまくいかないようなので、他の2つの方法のいずれかを試してください

于 2012-01-09T17:17:32.167 に答える