Это, к сожалению, происходит из-за того, как рассчитываются границы для 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/