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

Posted

技术标签:

【中文标题】Android ScrollView 在旋转动画上丢失剪辑【英文标题】:Android ScrollView loses clip on rotation animation 【发布时间】:2015-02-25 13:13:54 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

不幸的是,由于 ScrollView 的边界的计算方式,会发生这种情况。似乎边界没有与视图一起“旋转”。

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

代码看起来像这样:

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/

【讨论】:

以上是关于Android ScrollView 在旋转动画上丢失剪辑的主要内容,如果未能解决你的问题,请参考以下文章

如何在listview和scrollview结束时关闭wave动画

Android 动画

Android中实现ProgressBar菊花旋转的动画效果

Android中实现ProgressBar菊花旋转的动画效果

Android属性动画之旋转动画

为啥我的旋转动画有缓动效果?