2011-09-28 9 views
7

Olası yinelenen bir görüntü için/çıkış özelliği (iki parmak) yakınlaştırma nasıl etkinleştirilir:
android imageView: setting drag and pinch zoom parametersandroid

Ben bir var .. android çok yeni benim düzende görüntü görünümü .. Bu görüntü görünümünden gelen görüntü için yakınlaştırmayı etkinleştirmek ve uzaklaştırmak istiyorum .. iki parmak dokunuşunda zum yapılmalıdır .. bunu nasıl başarabilirim,

sayesinde

Raj

+0

http://stackoverflow.com/questions/4227451/android-imageview-setting-drag-and-pinch-zoom-parameters yayınına bakın bakın – Abhi

cevap

12

bu

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

Yukarıdaki kodu kullanarak başarılı bir şekilde yakınlaştırıp uzaklaştırabilirim .. Ama görüntü benim düzenimin dışına taşınıyor .. Görüntü yakınlaştırmayı mizanpaj içinde kısıtlamak mümkün mü? .. başlangıçta görüntü boyutu – Keerthiraj

+0

ekran boyutuna eşit olmalıdır Merhaba, lütfen ekranın içindeki görüntüyü nasıl sınırlandıracağınızı söyler misiniz? – Keerthiraj