2014-09-20 56 views
0

enter image description here圓內可移動圖像

在這張圖片中,圓是靜態的。矩形圖像位於此圓的後面。我需要移動,縮小,放大並平移該圓圈內的矩形圖像。如何實現這一目標?

給我建議如何做到這一點。

在此先感謝

+0

給我建議比放棄投票兄弟。我會糾正我的錯誤 – 2014-09-20 03:45:48

回答

2

平移的ImageView遵循的準則可以這樣做:

  1. 採取相對佈局
  2. 在此佈局中添加ImageView。
  3. 現在在其中添加圓形圖像。

例如:

 <RelativeLayout> 
     <ImageView /> // image which have to apply movement. 
     <ImaeView /> // circle shape 
     </RelativeLayout> 

然後應用以下代碼來使用的ImageView的移動。

實現活動與OnTouchListener,然後

  img.setonTouchListener(this); 



     @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 
    view= (ImageView) v; 


     // make the image scalable as a matrix 
     view.setScaleType(ImageView.ScaleType.MATRIX); 
     float scale; 

     // 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); // calculates the distance between two points where user touched. 
      Log.d(TAG, "oldDist=" + oldDist); 
      // minimal distance between both the fingers 
      if (oldDist > 5f) { 
       savedMatrix.set(matrix); 
       midPoint(mid, event); // sets the mid-point of the straight line between two points where user touched. 
       mode = ZOOM; 
       Log.d(TAG, "mode=ZOOM"); 
      } 
      break; 

     case MotionEvent.ACTION_MOVE: 
      if (mode == DRAG) 
      { //movement of first finger 
       matrix.set(savedMatrix); 
       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; //thinking I need to play around with this value to limit it** 
       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 FloatMath.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); 
    } 

希望這會幫助你,它很容易的任務。

+0

感謝balvinder!這是我需要的。 – 2014-09-20 08:06:43

+0

不客氣..享受!!!!! – 2014-09-20 09:25:31

+0

但是如果我們當時使用唯一的環形圖像imageview的角落,它是在圓形的imageview後面,它也顯示在圓外,那麼我們必須做什麼? – 2016-12-03 09:00:17

1

看看

TouchImageView

可以放大縮小,並使用類

+0

謝謝兄弟!我會嘗試 – 2014-09-20 03:59:15