2016-10-22 72 views
0

我试过捏缩放和拖动我的app.I面临两个问题。 1.首先触摸图像移动到其他位置。拖动操作从该改变的位置起作用。 2.在变焦期间,图像反弹到特定位置,拖动动作对跳跃后的特定边界起作用。此问题偶尔不会频繁出现。 这里是我的代码捏变焦反弹到特定的位置在android

public boolean onTouch(View v, MotionEvent event) { 
    ImageView view = (ImageView) v; 
    view.setScaleType(ImageView.ScaleType.MATRIX); 
    float scale; 

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

    // Handle touch events here... 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 

     case MotionEvent.ACTION_DOWN: //first finger down only 
      // savedMatrix.set(matrix); 
      start.set(event.getX(), event.getY()); 
      Log.d(TAG, "mode=DRAG"); 
      mode = DRAG; 
      break; 
     case MotionEvent.ACTION_UP: //first finger lifted 
     case MotionEvent.ACTION_POINTER_UP: //second finger lifted 
      mode = NONE; 
      Log.d(TAG, "mode=NONE"); 
      break; 
     case MotionEvent.ACTION_POINTER_DOWN: //second finger down 
      oldDist = spacing(event); 
      Log.d(TAG, "oldDist=" + oldDist); 
      if (oldDist > 5f) { 
       savedMatrix.set(matrix); 
       midPoint(mid, event); 
       mode = ZOOM; 
       Log.d(TAG, "mode=ZOOM"); 
      } 
      break; 

     case MotionEvent.ACTION_MOVE: 
      if (mode == DRAG) { //movement of first finger 


       matrix.set(savedMatrix); 
       float dx = event.getX() - start.x; 
       float dy = event.getY() - start.y; 
       matrix.postTranslate(dx, dy); 

       /*if (view.getLeft() >= -392){ 
        matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); 
       }*/ 
      } 
      else if (mode == ZOOM) { //pinch zooming 
       float newDist = spacing(event); 
       Log.d(TAG, "newDist=" + newDist); 
       if (newDist > 5f) { 
        matrix.set(savedMatrix); 
        scale = newDist/oldDist; 
        matrix.postScale(scale, scale, mid.x, mid.y); 
       } 
      } 
      break; 
    } 

    // Perform the transformation 
    view.setImageMatrix(matrix); 

    return true; // indicate event was handled 
} 

private float spacing(MotionEvent event) { 
    float x = event.getX(0) - event.getX(1); 
    float y = event.getY(0) - event.getY(1); 
    return (float)Math.sqrt(x * x + y * y); 
} 

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); 
} 

/** Show an event in the LogCat view, for debugging */ 
private void dumpEvent(MotionEvent event) { 
    String names[] = { "DOWN" , "UP" , "MOVE" , "CANCEL" , "OUTSIDE" , 
      "POINTER_DOWN" , "POINTER_UP" , "7?" , "8?" , "9?" }; 
    StringBuilder sb = new StringBuilder(); 
    int action = event.getAction(); 
    int actionCode = action & MotionEvent.ACTION_MASK; 
    sb.append("event ACTION_").append(names[actionCode]); 
    if (actionCode == MotionEvent.ACTION_POINTER_DOWN 
      || actionCode == MotionEvent.ACTION_POINTER_UP) { 
     sb.append("(pid ").append(
       action >> MotionEvent.ACTION_POINTER_ID_SHIFT); 
     sb.append(")"); 
    } 
    sb.append("["); 
    for (int i = 0; i < event.getPointerCount(); i++) { 
     sb.append("#").append(i); 
     sb.append("(pid ").append(event.getPointerId(i)); 
     sb.append(")=").append((int) event.getX(i)); 
     sb.append(",").append((int) event.getY(i)); 
     if (i + 1 < event.getPointerCount()) 
      sb.append(";"); 
    } 
    sb.append("]"); 
    Log.d(TAG, sb.toString()); 
} 

回答

0

如果你想放大的图像的ImageView比你可以使用PhotoView库。

+0

老兄我试过这个例子,但图像视图在缩放期间闪烁 – sri

+0

我已经实现我没有面对那个问题 –

+0

现在只有我已经试过这个例子后,你告诉 – sri