2014-09-20 50 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