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/
我正在使用 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/