Android: анимация ViewFlipper - PullRequest
       1

Android: анимация ViewFlipper

5 голосов
/ 13 июля 2011

Я добавил ViewFlipper, в котором есть 2 linearlayout, и я сделал анимацию XML: left_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="3000"/>
</set>

right_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="3000"/>
</set>

left_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="3000"/>
</set>

right_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="3000"/>
</set>

кнопка «Далее» в одном линейном слое, который показывает при первой загрузке приложения:

mNext.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v) {
                // TODO Auto-generated method stub
                mViewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper1);
                //mViewFlipper.setAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_in));
                mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_in));
                mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_out));
                mViewFlipper.showNext();
            }

        });

и кнопка «Предыдущая»:

mPrev.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mViewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper1);
            mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_in));
            mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_out));
            mViewFlipper.showPrevious();
        }       
    });

Кнопка «Далее» работает хорошо, но кнопка «Предыдущая» выглядит странно: когда я нажимаю кнопку «предыдущая», она сначала переходит в предыдущее представление, а затем запускает анимацию и, наконец, она переходит в предыдущее представление. снова! Как это решить ?? Заранее спасибо !!

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Вы хотите использовать setOutAnimation() и setInAnimation().

3 голосов
/ 29 апреля 2013

Ну, это очень старый пост.но все же исправление здесь:

вам нужно вызвать viewFlipper.setOutAnimation(null) и viewFlipper.setInAnimation(null) для сброса анимации.

   @Override
        public void onClick(View v)
        {
        if (v.equals(mNext))
        {
            mViewFlipper.setOutAnimation(null);

             mViewFlipper.setInAnimation(null);
              mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_in));

        vf.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_out));

            mViewFlipper.showNext();

        }
        else if (v.equals(mPrev))
        {

            mViewFlipper.setOutAnimation(null);

             mViewFlipper.setInAnimation(null);

            mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_in));

        mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_out));

             mViewFlipper.showPrevious();
        }

        }
...