2015-02-25 1 views
2

J'utilise Rotate3dAnimation pour retourner une vue de carte qui contient un ScrollView. Mais pendant l'animation, ScrollView perd un clip d'une façon ou d'une autre, ainsi je vois le haut et le bas du contenu de ScrollView en dehors des limites de la vue de la carte (et de ScrollView) jusqu'à ce que l'animation soit terminée.Android ScrollView perd le clip sur l'animation de rotation

Pourquoi est-ce et comment vaincre ce comportement?

Répondre

2

Cela arrive malheureusement en raison de la manière dont les limites du ScrollView sont calculées. Il semble que les limites ne sont pas "tournées" avec la vue. Un travail consiste à prendre un instantané de chaque vue - à la fois l'avant et l'arrière de la carte - puis à animer entre ces instantanés au-dessus des vues réelles.

Le code ressemblerait à quelque chose comme ceci:

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); 

Pour flip arrière animations compatibles, j'utilise http://genzeb.github.io/flip/