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