2012-10-26 3 views
2

Nous utilisons un TouchImageView et souhaitons implémenter un zoom onDoubleTap ... jusqu'ici tout va bien.Comportement étrange ScaleAnimation setFillAfter (true)/false

Le problème est:

si l'on applique une animation à l'échelle et mis setFillAfter (false), dans un AnimationListener.onAnimationEnd, on applique la matrice correcte à la imageview, et tout fonctionne comme prévu (défilement, autres gestes de zoom, etc.). -> mais - vous voyez une petite flackering à l'écran (ce qui est compréhensible - parce que l'animation revient au début et après les changements de la matrice sera appliquée)

de l'autre côté, si setFillEnabled (vrai), l'animation est superbe, pas flackering, mais en quelque sorte la vue est complètement foiré, au premier tout semble très bien, mais le et les niveaux de zoom min sont complètement foiré - vous ne pouvez pas zoomer au zoom initial plus, et aussi déplacer l'image ne fonctionne pas comme prévu - les frontières sont fausses? quelque chose comme ça)

Donc notre question (s);)?
- Que fait réellement une ScaleAnimation avec setFillAfter (true)?
- Change-t-il la taille de l'imageview (complète)?
- Qu'est-ce qui ne va pas: /?

comme toujours merci beaucoup pour votre aide: =) acclamations,

// BTW: cela se produit dans toutes les versions Android < = 4, sur 4.1 le problème décrit ne marche pas se produire et everyhting fonctionne comme prévu .

---------------
mise à jour:
de sorte que le code actuel est comme ça, fonctionne, (pas de problème à plus zoom), mais a une petite "scintillement" entre le réglage de la matrice et l'effacement de l'animation (bien que) le code montre, qu'il doit appliquer la matrice -avant- l'animation est nettoyée, donc j'espérais une transition sans heurt ...
thx pour votre réponse!

  Log.v("TouchImageView", "Zoom in"); 
      ScaleAnimation zoomIn = new ScaleAnimation(saveScale, SCALE_DOUBLE_TAP, saveScale, SCALE_DOUBLE_TAP, width/2, height/2); 
      zoomIn.setDuration(200); 
      zoomIn.setFillAfter(true); 
      zoomIn.setAnimationListener(new AnimationListener() { 

       @Override 
       public void onAnimationStart(Animation animation) { 
        isAnimating = true; 
        saveScale = SCALE_DOUBLE_TAP; 
        right = width * saveScale - width - (2 * redundantXSpace * saveScale); 
        bottom = height * saveScale - height - (2 * redundantYSpace * saveScale); 
       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 

       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 
        isAnimating = false; 
        matrix.postScale(SCALE_DOUBLE_TAP, SCALE_DOUBLE_TAP, width/2, height/2); 
        matrix.getValues(matrixValues); 
        setImageMatrix(matrix); 
        clearAnimation(); 
       } 
      }); 


      startAnimation(zoomIn); 

Répondre

5

setFillAfter(true) sera faux qu'il est effectivement mis à l'échelle, je recommande de l'utiliser en conjonction avec votre mise à l'échelle de la matrice. À la fin de l'animation, appliquez la matrice et appelez le clearAnimation() sur le View sur lequel l'animation a été appliquée. Cela devrait corriger le scintillement.

+0

bon conseil, merci beaucoup d'expliquer :) dès que je commence à travailler le lundi matin: =) je vais vous le faire savoir que cela fonctionne .. mais il semble que ce serait la "réponse secrète; D " – cV2

+0

hey, juste appliqué vos changements et en quelque sorte" fonctionne ..."mais maintenant, en raison de clearAnimation efface l'animation, je reçois un petit" scintillement "sur l'écran, vous voyez que l'animation est effacée, puis la matrice est appliquée, j'ai mis à jour le poste ci-dessus, peut-être vous avez une idée éviter cela :) – cV2