Android, анимация изображения вверх и вниз - PullRequest
0 голосов
/ 02 мая 2011

Я пытаюсь анимировать изображение, начиная с нижнего экрана, поднимаясь, а затем обратно (делая приложение для вкладки Galaxy).Обе эти анимации работают по отдельности, но когда я пытаюсь создать AnimationSet, я не могу заставить их работать.Я даже попытался создать 2 AsyncTasks и вызвать 2-ю анимацию в onPostExecute 1-го AsyncTask, но все равно не будет работать.

это мой XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:id="@+id/rel_layout"
   >
    <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ad200"
        android:id="@+id/image"
    />
</RelativeLayout>

И это мой кодпытаюсь использовать для анимации изображения:

AnimationSet set = new AnimationSet(true);

Animation anim1 = new TranslateAnimation(0, 0, 1024, 824);
anim1.setDuration(3000);
anim1.setFillAfter(true);
set.addAnimation(anim1);

Animation anim2 = new TranslateAnimation(0, 0, 824, 1024);
anim2.setDuration(3000);
anim2.setFillAfter(true);
set.addAnimation(anim2);

imageView.clearAnimation();
set.setFillAfter(true);
imageView.startAnimation(set);

Ответы [ 3 ]

1 голос
/ 06 июля 2013

Ну, WendiKidd,

Вы очень близки к вашему решению.Вы только что пропустили Animation.AnimationListener () в своем коде.

Animation anim1 = new TranslateAnimation(0, 0, 1024, 824);
anim1.setDuration(3000);
anim1.setFillAfter(true);

anim1.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                Animation anim2 = new TranslateAnimation(0, 0, 824, 1024);
                anim2.setDuration(3000);
                anim2.setFillAfter(true);
                imageView.clearAnimation();
                imageView.startAnimation(anim2);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });


imageView.startAnimation(anim1);

Пример выше запустит anim2 после окончания anim1.

0 голосов
/ 13 сентября 2017

Вот это решение ... попробуйте этот код ниже ... я использую этот код много раз .. и он отлично работает .. ======>

    Animation zoomin =new TranslateAnimation(1, 1, 0, -50);
    zoomin.setDuration(1000);
    zoomin.setFillEnabled(true);
    zoomin.setFillAfter(true);

    Animation zoomout =  new TranslateAnimation(1, 1, -50, 0);
    zoomout.setDuration(1000);
    zoomout.setFillEnabled(true);
    zoomout.setFillAfter(true);

    imageView.startAnimation(zoomin);

    zoomin.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationStart(Animation arg0) {
            // TODO Auto-generated method stub

        }

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

        }

        @Override
        public void onAnimationEnd(Animation arg0) {
            imageView.startAnimation(zoomout);
          }
    });

    zoomout.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationStart(Animation arg0) {
            // TODO Auto-generated method stub

        }

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

        }

        @Override
        public void onAnimationEnd(Animation arg0) {

            imageView.startAnimation(zoomin);


        }
    });
0 голосов
/ 02 мая 2011

Похоже, вы запускаете обе анимации одновременно. Добавьте anim2.setStartOffset (3000) ко второй анимации. Это приведет к тому, что вторая анимация начнется через 3000 мс после первой.

BR, Кристоффер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...