2012-10-06 58 views
0

我是新的在Android.I已經完成圖像視圖的縮放。現在面臨一些問題。 1)不能設置縮放級別。 2)圖像也在移動。我想停止 這裏是我的代碼:無法設置圖像縮放級別並修復圖像視圖

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.show_image); 
    imageView1 = (ImageView) findViewById(R.id.showImageView1); 
    imageView2 = (ImageView) findViewById(R.id.Food_pic2); 
    // get image path from list View 
    Intent intent = getIntent(); 
    int path1 = intent.getIntExtra("image1", 0); 
    int path2 = intent.getIntExtra("image2", 0); 
    imageView1.setImageResource(path1); 
    imageView1.setOnTouchListener(this); 

} 

這裏是我的觸摸聽者

@Override 
public boolean onTouch(View v, MotionEvent event) { 

    ImageView view = (ImageView) v; 
    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"); 
     savedMatrix.set(matrix); 

     break; 
    case MotionEvent.ACTION_MOVE: 

     if (mode == DRAG) { 

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

    view.setImageMatrix(matrix); 

    return true; 

} 

/** 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()); 
} 

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

我搜索,看到與此相關的最大值。但我無法解決我的問題。

如何以及在哪裏寫代碼來設置縮放級別並停止移動我的圖像視圖。

在此先感謝。

回答

1

這就是運動正在發生的事情:

if (mode == DRAG) { 

      matrix.set(savedMatrix); 
      matrix.postTranslate(event.getX() - start.x, event.getY() 
        - start.y); 
     } 

如果你不想運動,然後執行,如果塊內什麼都沒有。

如果你不想放大或縮小用戶還,那麼您可以將此部分留空太:

else if (mode == ZOOM) { 
      float newDist = spacing(event); 
      Log.d(TAG, "newDist=" + newDist); 
      if (newDist > 10f) { 
       matrix.set(savedMatrix); 
       float scale = newDist/oldDist; 
       // i edited here. 
       //i set zoom level here 
       matrix.getValues(matrixValues); 
       float currentScale = matrixValues[Matrix.MSCALE_X]; 
       if (scale * currentScale > MAX_ZOOM) { 
        scale = MAX_ZOOM/currentScale; 
       } else if (scale * currentScale < MIN_ZOOM) { 
        scale = MIN_ZOOM/currentScale; 
       } 

       matrix.postScale(scale, scale, mid.x, mid.y); 
      } 
     } 

,如果你想設置縮放級別,你做view.setImageMatrix(matrix)可以縮放圖像之前手動使用

matrix.postScale(val1,val2,val3,val4); 

玩弄功能裏面的值來獲得你想要的縮放級別,因爲這是設置縮放級別的功能。

+0

現在我完成這份工作。但是在縮放後,圖像會移動,我想將它放在原來的位置。你能告訴我如何限制屏幕內的圖像@ Anup Cowkur –

+0

這是一個被覆蓋的方法。它需要2種形式。請參閱http://developer.android.com/reference/android/graphics/Matrix.html#postScale(float,float) –

+0

老兄,無法理解... @ Anup Cowkar –