2013-05-29 3 views
2

J'ai le code suivant dans une vue personnalisée, c'est un ScaleGestureDetector et ce que je veux faire avec c'est de changer la largeur et la hauteur de la vue lorsque vous pincez sur l'écran, mais toujours le ScaleFactor pour être un, je ne sais pas comment l'expliquer, mais pendant quelques secondes le ScaleFactor est inférieur/supérieur à un, puis redevient un. Vous pouvez voir ce que je dis dans la sortie de logCat.ScaleFactor a tendance à être un

code:

public class simpleOnScaleGestureListener extends SimpleOnScaleGestureListener { 
    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     float ScaleFactor = 1.0f; 
     ScaleFactor *= detector.getScaleFactor(); 

     // Don't let the object get too small or too large. 
      ScaleFactor = Math.max(0.1f, Math.min(ScaleFactor, 5.0f)); 


     Log.d("ScaleFactor", "The ScaleFactor is "+ScaleFactor); 

    return true; 
    } 
    @Override 
    public void onScaleEnd(ScaleGestureDetector detector) { 

    } 
} 

sortie LogCat:

05-29 19:37:48.019: D/ScaleFactor(7279): The ScaleFactor is 1.0247091 
05-29 19:37:48.059: D/ScaleFactor(7279): The ScaleFactor is 1.0090069 
05-29 19:37:48.069: D/ScaleFactor(7279): The ScaleFactor is 1.0268435 
05-29 19:37:48.109: D/ScaleFactor(7279): The ScaleFactor is 1.0389019 
05-29 19:37:48.119: D/ScaleFactor(7279): The ScaleFactor is 1.0236202 
05-29 19:37:48.159: D/ScaleFactor(7279): The ScaleFactor is 1.0267988 
05-29 19:37:48.169: D/ScaleFactor(7279): The ScaleFactor is 1.0133468 
05-29 19:37:48.199: D/ScaleFactor(7279): The ScaleFactor is 1.0230283 
05-29 19:37:48.219: D/ScaleFactor(7279): The ScaleFactor is 1.003792 
05-29 19:37:48.599: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:48.629: D/ScaleFactor(7279): The ScaleFactor is 1.2110677 
05-29 19:37:48.639: D/ScaleFactor(7279): The ScaleFactor is 1.2486423 
05-29 19:37:48.679: D/ScaleFactor(7279): The ScaleFactor is 1.0709958 
05-29 19:37:48.689: D/ScaleFactor(7279): The ScaleFactor is 1.094618 
05-29 19:37:49.229: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:49.259: D/ScaleFactor(7279): The ScaleFactor is 1.2032005 
05-29 19:37:49.269: D/ScaleFactor(7279): The ScaleFactor is 1.1687788 
05-29 19:37:49.309: D/ScaleFactor(7279): The ScaleFactor is 1.0600644 
05-29 19:37:49.319: D/ScaleFactor(7279): The ScaleFactor is 1.0608224 
05-29 19:37:50.049: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:50.079: D/ScaleFactor(7279): The ScaleFactor is 1.3738323 
05-29 19:37:50.089: D/ScaleFactor(7279): The ScaleFactor is 1.1507335 
05-29 19:37:50.129: D/ScaleFactor(7279): The ScaleFactor is 1.2026775 
05-29 19:37:50.899: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:50.929: D/ScaleFactor(7279): The ScaleFactor is 1.5862415 
05-29 19:37:50.939: D/ScaleFactor(7279): The ScaleFactor is 1.1621073 
05-29 19:37:52.559: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:52.599: D/ScaleFactor(7279): The ScaleFactor is 1.0097717 
05-29 19:37:52.599: D/ScaleFactor(7279): The ScaleFactor is 1.0186267 

Répondre

2

Ce code est le tutoriel Android sur Dragging and Scaling, mais avec une différence cruciale: la variable locale 'ScaleFactor' (sidenote - convention est de démarrer les noms de variables avec une lettre minuscule) est déclaré en tant que variable instance/membre mScaleFactor pour l'ensemble de la classe dans le code d'origine (le 'm' signifie membre dans Android).

Le résultat escompté est que la ligne:

ScaleFactor *= detector.getScaleFactor(); 

accumulera les facteurs d'échelle des événements individuels en une valeur significative au cours du geste, alors que dans votre version, il remet à chaque appel à onScale() Ainsi, vous ne voyez que les valeurs momentanées créées par chaque événement de mise à l'échelle individuel.

Si cela reste un peu déroutant, consultez un manuel Java de base pour une description des différents types de variables et de leur portée.

+0

Je vais essayer! Merci –

3

avec

float ScaleFactor = 1.0f; 

vous êtes reseting l'échelle au début de chaque pincement. Essayez une variable globale.

Questions connexes