2011-09-28 30 views
7

thể trùng lặp:
android imageView: setting drag and pinch zoom parametersLàm thế nào để kích hoạt tính (hai ngón tay) zoom trong tính năng ra/vào cho một hình ảnh trong android

Tôi rất mới cho Android .. Tôi có một hình ảnh trong bố trí của tôi .. Tôi muốn kích hoạt phóng to và thu nhỏ cho hình ảnh đến từ hình ảnh này .. zoom phải được thực hiện trên hai ngón tay chạm vào .. bất cứ ai có thể cho tôi biết làm thế nào để thực hiện điều này,

Cảm ơn,

Raj

+0

http://stackoverflow.com/questions/4227451/android-imageview-setting-drag-and-pinch-zoom-parameters thấy bài đăng này – Abhi

Trả lời

12

thấy điều này

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

Sử dụng mã trên tôi có thể phóng to và thu nhỏ thành công .. Nhưng hình ảnh di chuyển ra khỏi bố cục của tôi .. Có thể hạn chế phóng to hình ảnh trong bố cục .. ban đầu kích thước hình ảnh phải tương đương với kích thước màn hình – Keerthiraj

+0

Xin chào, bạn có thể cho tôi biết cách hạn chế hình ảnh trong màn hình không – Keerthiraj

Các vấn đề liên quan