如何连续在recyclerView上运行两个不同的动画?

时间:2018-02-16 14:03:34

标签: android xml android-layout android-recyclerview

我有一个水平的recyclelerView,我想在首次打开活动时为它设置动画(向右滑动然后向左滑动)。

所以我在onCreate中执行此操作:

final Animation slideRight = AnimationUtils.loadAnimation(this, R.anim.slide_right);
        slideRight.setDuration(200);

        final Animation slideLeft = AnimationUtils.loadAnimation(this, R.anim.slide_left);
        slideLeft.setDuration(200);

        RecyclerView recyclerView = findViewById(R.id.recycler_view);
        recyclerView.startAnimation(slideRight);
        recyclerView.startAnimation(slideLeft);

但似乎只有正确的幻灯片

这是我的目标:

左侧幻灯片

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="200"
        android:fromXDelta="-100%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />

</set>

右侧幻灯片

<translate
    android:duration="200"
    android:fromXDelta="100%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />

我做错了什么?

编辑:这与拟议的重复有什么关系?

2 个答案:

答案 0 :(得分:0)

在这种情况下,slideLeft动画将有效...因为在slideRight正常工作之前slideleft正在开始..所以这样做......

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

        }

        @Override
        public void onAnimationEnd(Animation animation) {

            recyclerView.startAnimation(slideLeft);

        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });
}

在动画结束时,右边开始动画

修改 或者你可以通过在你的动画中添加repeatMode = reverse和repeatCount = 1`来启动一个动画。

android:repeatMode="reverse" android:repeatCount="1"

答案 1 :(得分:0)

尝试这个

Animation slideRight = AnimationUtils.loadAnimation(this, R.anim.slide_right);
Animation slideLeft = AnimationUtils.loadAnimation(this, R.anim.slide_left);
slideRight.setDuration(200);
slideLeft.setDuration(200);
slideRight .setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {
               recyclerView.startAnimation(slideLeft);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });
  recyclerView.startAnimation(slideRight);