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中实现ProgressBar菊花旋转的动画效果