2011-09-28 14 views
7

Duplicar posible:
android imageView: setting drag and pinch zoom parametersCómo habilitar la (dos dedos) zoom in/out función de una imagen en Android

Soy muy nuevo a Android .. Tengo una vista de imagen en mi diseño ... quiero habilitar el acercamiento y alejamiento de la imagen que viene de esta vista de imagen ... el zoom debe hacerse con dos dedos ... ¿alguien puede decirme cómo lograr esto,

Gracias,

Raj

+0

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

Respuesta

12

ver este

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

Utilizando el código anterior, puedo acercar y alejar con éxito .. Pero la imagen se sale de mi diseño ... ¿Es posible restringir el zoom de la imagen dentro del diseño ... que inicialmente el tamaño de la imagen debería ser equivalente al tamaño de pantalla – Keerthiraj

+0

Hola, ¿puedes decirme cómo restringir la imagen dentro de la pantalla? – Keerthiraj

Cuestiones relacionadas