Ho scoperto che setPivotX
(anche setPivotY
) funziona in modo strano in Android. Se imposti il pivot quando la scala della vista è impostata su 1.00f non accade nulla (solo le modifiche di pivot). Ma se la scala non è uguale a 1,0f (ad esempio setScaleX(0.9f)
) e si imposta il pivot, la vista si sposta relativamente (?) Al nuovo pivot. Non è strano? So che le posizioni orizzontali e verticali (traduzioni) NON sono correlate al valore pivot, ma perché la vista si sposta con un fattore di scala diverso da 1.0f?setPivotX funziona in modo anomalo Visualizza in scala
Controllare con e senza la parte di scalatura.
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);
}
}
Come impostare la stessa posizione della vista, che era prima della modifica del pivot?
Questo mi sembra un bug in Android. Il ridimensionamento di un punto di rotazione viene eseguito convertendo il perno, eseguendo la scala e convertendone il valore. Le operazioni 'setScale' dovrebbero fare questo, e la vista non dovrebbe saltare. Il ridimensionamento è un'operazione che non dovrebbe tradurre visivamente le viste. –
Ciao, mi sono imbattuto nello stesso problema ed è stato in grado di risolverlo con la tua risposta. Tuttavia, mi chiedo ancora come funziona il pivot su viste scalate. Potresti fornire alcune linee guida o forse un link? Grazie in anticipo. – aleien
@aleien mi dispiace non posso aiutarti, non penso che ci siano delle linee guida sul ridimensionamento delle viste usando i punti pivot. – tomrozb