Android ScrollView 在旋转动画时丢失剪辑

Android ScrollView loses clip on rotation animation

我正在使用 Rotate3dAnimation 翻转包含 ScrollView 的卡片视图。但是在动画期间,ScrollView 以某种方式丢失了剪辑,所以我看到 ScrollView 内容的顶部和底部在卡片视图(和 ScrollView)边界之外,直到动画完成。

为什么会这样以及如何克服这种行为?

不幸的是,这是由于计算 ScrollView 边界的方式造成的。似乎边界不是 "rotated" 以及视图。

一种解决方法是为每个视图拍摄快照 - 包括卡片的正面和背面 - 然后在实际视图上方的这些快照之间制作动画。

代码看起来像这样:

firstView.setDrawingCacheEnabled(true);
firstAnimationView.setBackgroundDrawable(new BitmapDrawable(firstView.getDrawingCache()));

secondView.setDrawingCacheEnabled(true);
secondAnimationView.setBackgroundDrawable(new BitmapDrawable(secondView.getDrawingCache()));

Animation flipOutAnimation = createFlipOutAnimation();

flipOutAnimation.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            firstAnimationView.setVisibility(View.GONE);
        }

        ...

    });

Animation flipInAnimation = createFlipInAnimation();

flipInAnimation.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {

            animationBackgroundView.setVisibility(View.GONE);
            secondAnimationView.setVisibility(View.GONE);
        }

        ...

    });

firstAnimationView.startAnimation(flipOutAnimation);
secondAnimationView.startAnimation(flipInAnimation);

animationBackgroundView.setVisibility(View.VISIBLE);
firstAnimationView.setVisibility(View.VISIBLE);
secondAnimationView.setVisibility(View.VISIBLE);

为了向后兼容的翻转动画,我使用http://genzeb.github.io/flip/