SetPivotX fonctionne étrange à l'échelle View

J'ai découvert que setPivotX (également setPivotY ) fonctionne étrange dans Android. Si vous définissez le pivot lorsque l'échelle de la vue est réglée sur 1.00f, rien ne se produit (simplement les changements de pivotement). Mais si la balance n'est pas égale à 1,0f (par ex. setScaleX(0.9f) ) et que vous définissez le pivot, la vue se déplace relativement (?) setScaleX(0.9f) le nouveau pivot. N'est-ce pas étrange? Je sais que les positions horizontales et verticales (traductions) ne sont PAS liées à la valeur de pivotement, mais pourquoi la vue se déplace avec un facteur d'échelle autre que 1.0f?

Veuillez vérifier ceci avec et sans la partie de mise à l'échelle.

  • Comment obstruer peu de classe ou un seul paquet?
  • Comment faire le tour du coin d'un côté de la vision de texte dans Android
  • Signal fatal 6 Code SIGABRT = -6
  • Connexion d'erreur refusée
  • Comment communiquer avec un périphérique USB?
  • Erreur: java.lang.NoClassDefFoundError Android
  •  public class ScaleView extends View { private final ScaleGestureDetector mScaleGestureDetector; public ScaleView(Context context, AttributeSet attrs) { super(context, attrs); //setScaleX(0.9f); //setScaleY(0.9f); mScaleGestureDetector = new ScaleGestureDetector(context, new ScaleGestureDetector.OnScaleGestureListener() { @Override public void onScaleEnd(ScaleGestureDetector detector) { // does nothing intentionally } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { setPivotX(detector.getFocusX()); setPivotY(detector.getFocusY()); return true; } @Override public boolean onScale(ScaleGestureDetector detector) { return false; } }); } @Override public boolean onTouchEvent(MotionEvent event) { mScaleGestureDetector.onTouchEvent(event); return super.onTouchEvent(event); } } 

    Comment puis-je définir la même position de la vue, avant que le pivot ne change?

  • Comment puis-je mettre à l'échelle un bitmap en direct sans lire l'image entière d'abord?
  • Ajuster l'image dans ImageView, garder le rapport d'aspect, puis redimensionner ImageView aux dimensions de l'image?
  • Comment classer les sprites dans libgdx en fonction des résolutions d'écran?
  • Android redimensionner bitmap garder le rapport d'aspect
  • Scalé Bitmap maintien du rapport d'aspect
  • Puis-je étaler une vue dans Android?
  • One Solution collect form web for “SetPivotX fonctionne étrange à l'échelle View”

    J'ai résolu le problème. Voici le code de fonctionnement:

     @Override public boolean onScaleBegin(ScaleGestureDetector detector) { float newX = detector.getFocusX(); float newY = detector.getFocusY(); setTranslationX(getTranslationX() + (getPivotX() - newX) * (1 - getScaleX())); setTranslationY(getTranslationY() + (getPivotY() - newY) * (1 - getScaleY())); setPivotX(newX); setPivotY(newY); return true; } 

    Le problème principal est de comprendre comment le pivot fonctionne sur les vues mises à l'échelle, alors il ne devrait pas y avoir de problème avec un comportement de pivot étrange.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.