2011-09-28 8 views
7

Eventuali duplicati:
android imageView: setting drag and pinch zoom parametersCome abilitare il (due dita) zoom in/out funzione di un'immagine in Android

Sono molto nuovo per android .. Ho un vista immagine nel mio layout .. Voglio attivare lo zoom avanti e indietro per l'immagine proveniente da questa immagine .. lo zoom dovrebbe essere fatto con due dita .. qualcuno può dirmi come farlo,

Grazie,

Raj

+0

http://stackoverflow.com/questions/4227451/android-imageview-setting-drag-and-pinch-zoom-parameters vedi questo post – Abhi

risposta

12

vedono questo

private static final String TAG = "Touch"; 

//These matrices will be used to move and zoom image 
Matrix matrix = new Matrix(); 
Matrix savedMatrix = new Matrix(); 

// We can be in one of these 3 states 
static final int NONE = 0; 
static final int DRAG = 1; 
static final int ZOOM = 2; 
static final int DRAW =3; 
int mode = NONE; 

// Remember some things for zooming 
PointF start = new PointF(); 
PointF mid = new PointF(); 
float oldDist = 1f; 

// Limit zoomable/pannable image 
private float[] matrixValues = new float[9]; 
private float maxZoom; 
private float minZoom; 
private float height; 
private float width; 
private RectF viewRect; 
/////////************ touch events functions **************//////////////////// 
@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if(hasFocus){ init(); } 
} 
private void init() { 
    maxZoom = 4; 
    minZoom = 0.25f; 
    height = myimage.getDrawable().getIntrinsicHeight()+20; 
    width = myimage.getDrawable().getIntrinsicWidth()+20; 
    viewRect = new RectF(0, 0, myimage.getWidth()+20, myimage.getHeight()+20); 
} 

    /////////************touch events for image Moving, panning and zooming ***********/// 
public boolean onTouch(View v, MotionEvent event) { 

    // 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 == DRAW){ onTouchEvent(event);} 
     if (mode == DRAG) { 
       ///code for draging..   
     } 
    else if (mode == ZOOM) { 
     float newDist = spacing(event); 
     Log.d(TAG, "newDist=" + newDist); 
     if (newDist > 10f) { 
      matrix.set(savedMatrix); 
      float scale = newDist/oldDist; 
      matrix.getValues(matrixValues); 
      float currentScale = matrixValues[Matrix.MSCALE_X]; 
      // limit zoom 
      if (scale * currentScale > maxZoom) { 
       scale = maxZoom/currentScale; 
       }else if(scale * currentScale < minZoom){ 
        scale = minZoom/currentScale; 
       } 
      matrix.postScale(scale, scale, mid.x, mid.y); 
      } 
    } 
    break; 
    } 
    myimage.setImageMatrix(matrix); 
    return true; // indicate event was handled 
} 

//*******************Determine the space between the first two fingers 
private float spacing(MotionEvent event) { 
    float x = event.getX(0) - event.getX(1); 
    float y = event.getY(0) - event.getY(1); 
    return FloatMath.sqrt(x * x + y * y); 
} 

//************* Calculate the mid point of the first two fingers 
private void midPoint(PointF point, MotionEvent event) { 
    float x = event.getX(0) + event.getX(1); 
    float y = event.getY(0) + event.getY(1); 
    point.set(x/2, y/2); 
} 
}  
+0

Usando il codice sopra posso ingrandire e rimpicciolire con successo .. Ma l'immagine esce dal mio layout .. E 'possibile limitare lo zoom dell'immagine all'interno del layout .. che inizialmente la dimensione dell'immagine dovrebbe essere equivalente alla dimensione dello schermo – Keerthiraj

+0

Ciao, puoi dirmi come limitare l'immagine all'interno dello schermo – Keerthiraj

Problemi correlati