动画rootview后动画子视图

时间:2014-12-24 14:27:18

标签: android animation android-animation

为了总结和简化我的问题,我尝试设置根视图的动画,然后设置子视图的动画。 第一个动画效果很好,但是大部分时间都保持不变。

布局:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</FrameLayout>

示例代码:

TranslateAnimation translateAnimation=new TranslateAnimation(0, 0, 0, 300);
    translateAnimation.setDuration(2000);
    translateAnimation.setFillAfter(true);
    translateAnimation.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) { }

        @Override
        public void onAnimationEnd(Animation animation) {
            RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            rotateAnimation.setInterpolator(new LinearInterpolator());
            rotateAnimation.setDuration(750);
            rotateAnimation.setRepeatCount(Animation.INFINITE);
            rotateAnimation.setRepeatMode(Animation.RESTART);

            imageView.startAnimation(rotateAnimation);
        }

        @Override
        public void onAnimationRepeat(Animation animation) { }
    });

    container.startAnimation(translateAnimation);

有时候我会看到imageview倾斜。或旋转,但只是一个部分。 有人知道发生了什么?

我也尝试使用setFilterAfter(false)并在onAnimationEnd上使用setTranslationY()移动我的容器,但是有些帧是可见的。

感谢。

修改

在实际情况中,TranslateAnimation在ViewPager的片段内的ViewPager(到QuickReturn模式)和RotateAnimation(到PullToRefresh模式)上。 因此,动画不一定像我上面所做的那样顺序,并且强烈分离(ViewPager / Fragment)。

EDIT2

我只是看到触摸区域不随视图移动。

1 个答案:

答案 0 :(得分:0)

我不是说它会去上班,但让我们试一试:

让我们分开动画,而不是用animationListener链接它们;所以相反,让我们使用ObjectAnimator和AnimationSet帮助我们为我们排序动画。

ObjectAnimator translateContainer = ObjectAnimator.ofFloat(container, "translationY", 300);
translateContainer.setDuration(2000);

ObjectAnimator rotateImage = ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f);
rotateImage.setDuration(750);

AnimatorSet animSet = new AnimatorSet();
animSet.playSequentially(translateContainer, rotateImage);
animSet.start();