1

以下のコードを使用して、Android アプリで translateAnimation を作成したいと思います。

        TranslateAnimation anim = new TranslateAnimation(0,0,-400,0);
        anim.setDuration(400);
        anim.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {                     
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation animation) {

                mlLinearLayout.clearAnimation();
                mlLinearLayout.requestLayout();
                mlLinearLayout.layout(mlLinearLayout.getLeft(), mlLinearLayout.getTop()+400, mlLinearLayout.getRight(), mlLinearLayout.getBottom());
            }
        });
        anim.setInterpolator(new AccelerateInterpolator());
        anim.setFillEnabled(true);
        anim.setFillAfter(true);
        anim.setFillBefore(false);
        mlLinearLayout.startAnimation(anim);
        active=false;

しかし、このアニメーションが完了すると、新しい位置でビューを再構築しても、LinearLayout は開始位置に戻ります。どうすれば変更できますか?

4

1 に答える 1

3

私は最終的に解決策を見つけました:

            TranslateAnimation anim = new TranslateAnimation(0,0,0,400);
            anim.setDuration(400);
            anim.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {                     
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    mlLinearLayout.layout(mlLinearLayout.getLeft(), mlLinearLayout.getTop()+400, mlLinearLayout.getRight(), mlLinearLayout.getBottom());
                }
            });
            anim.setFillEnabled(true);
            anim.setFillAfter(false);
            anim.setFillBefore(false);
            mlLinearLayout.startAnimation(anim);
            active=false;

翻訳後にビューを再構築すると、fillafter は役に立ちません。今では、ラグやジャンプなしで完璧に機能しています。

于 2013-03-26T09:40:39.917 に答える