2011-11-07 4 views
1

Comment déterminer le facteur d'échelle après le zoom. J'utilise le code ci-dessous pour le zoom de pincement. Après le zoom, je dois dessiner un cercle sur l'image au bon endroit. J'ai entendu cela la formule que nous devons utiliser pour dessiner au point correct après le zoom.Comment déterminer le facteur d'échelle en android

Formule:

float x = ev.getX()/mScaleFactor + rect.left; 
float y = ev.getY()/mScaleFactor + rect.top; 

Je ne sais pas comment calculer mScaleFactor.

J'utilise ci-dessous le code pour le zoom de pincement,

public boolean onTouch(View v, MotionEvent rawEvent) { 
    WrapMotionEvent event = WrapMotionEvent.wrap(rawEvent); 
    // ... 
    ImageView view = (ImageView) v; 

    // Dump touch event to log 
    dumpEvent(event); 

    // Handle touch events here... 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_DOWN: 
    savedMatrix.set(matrix); 
    start.set(event.getX(), event.getY()); 
    Log.d(TAG, "mode=DRAG"); 
    mode = DRAG; 
    break; 
    case MotionEvent.ACTION_POINTER_DOWN: 
    oldDist = spacing(event); 
    Log.d(TAG, "oldDist=" + oldDist); 
    if (oldDist > 10f) { 
     savedMatrix.set(matrix); 
     midPoint(mid, event); 
     mode = ZOOM; 
     Log.d(TAG, "mode=ZOOM"); 
    } 
    break; 
    case MotionEvent.ACTION_UP: 
    case MotionEvent.ACTION_POINTER_UP: 
    mode = NONE; 
    Log.d(TAG, "mode=NONE"); 
    break; 
    case MotionEvent.ACTION_MOVE: 
    if (mode == DRAG) { 
     // ... 
     matrix.set(savedMatrix); 
     matrix.postTranslate(event.getX() - start.x, 
       event.getY() - start.y); 
    } 
    else if (mode == ZOOM) { 
     float newDist = spacing(event); 
     Log.d(TAG, "newDist=" + newDist); 
     if (newDist > 10f) { 
      matrix.set(savedMatrix); 
      float scale = newDist/oldDist; 
      matrix.postScale(scale, scale, mid.x, mid.y); 
     } 
    } 
    break; 
    } 

    view.setImageMatrix(matrix); 
    return true; // indicate event was handled 

}

J'utilise imageview pour afficher l'image et le zoom. Utilisation du canevas et du bitmap Je dessine le cercle et le réglage sur la vue de l'image après le dessin.

Comment calculer le facteur d'échelle pour le code de zoom de pincement ci-dessus?

Merci d'avance.

Répondre

0

f vous utilisez la classe ScaleGestureDetector.SimpleOnScaleGestureListener vous pouvez faire quelque chose comme ceci:

@Override 
public boolean onScaleBegin(ScaleGestureDetector detector){ 
    //the focal point before taking into account the zoom/translations/etc 
    float startX = detector.getFocusX(); 
    float startY = detector.getFocusY(); 

    initialPoints = new float[]{startX, startY}; 
    if(transformMatrix.invert(inverseTransformMatrix)) 
     inverseTransformMatrix.mapPoints(initialPoints); 
    //initialPoints now contain the correct points based on the current zoom 
} 
Questions connexes