3

我正在尝试使用onTouchListener使imageview可拖动。这是我迄今为止的代码拖动Android如何在relativelayout中拖动imageview,然后将其放回原位

switch (ME.getAction()){ 
    case MotionEvent.ACTION_DOWN://IF USER PRESSED ON THE IMAGE 

     origix = v.getLeft(); //save original x coordinate calculated with the offset 
     origiy = v.getTop(); 
break; 
case MotionEvent.ACTION_MOVE://IF USER IS MOVING THE IMAGE 


      System.out.println("MOVED"); 
      int x_cord = (int)ME.getRawX(); //get coordinate of the user touch 
      int y_cord = (int)ME.getRawY(); 

      //set the image to the new coordinates based on where the user is touching and dragging 
      MarginLayoutParams marginParams = new MarginLayoutParams(v.getLayoutParams()); 
      marginParams.setMargins(x_cord - origix, y_cord - origiy,0, 0); 
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); 
      v.setLayoutParams(layoutParams); 
      MOVED = true; //mark that the image has been move 

    break; 

变量'v'是imageview。我得到的问题是,getRawX和getRawY没有返回正确的坐标(我认为...)。当我尝试触摸图像然后尝试拖动它时,图像开始从另一个位置拖动。通常比原来的位置更高,更多。的ImageView的处于RelativeLayout的和当移动开始我使用API​​ 10

+0

喜看看这个样本http://androidrox.wordpress.com/2011/05/13/android-sample-app-拖放图像使用触摸/ – itsrajesh4uguys

回答

1

需要得到抵消的RelativeLayout和屏幕

int offsety = (screenheight - relheight); //screenheight is the height of the screen and rel height is the height of the relativelayout that the image is in then changed  
marginParams.setMargins(x_cord - origix, y_cord - origiy,0, 0); to this  
marginParams.setMargins(x_cord - (v.getWidth()/2), y_cord - offsety - (v.getHeight()/2),0, 0); 
2

,需要的偏移量(即x_offsety_offset)与ImageView的初始位置进行初始化。

marginParams.setMargins(x_cord - x_offset, y_cord - y_offset,0, 0); 

这从不是从你的ImageView开始不同的位置开始停止你的拖累:

然后,如下此举应该进行修改。

+0

我刚刚尝试过,并更新了我的代码,但我仍然遇到同样的问题。图像开始从一个不同的位置移动,比当我没有放置偏移量时,但仍然从原始位置不同的位置开始 – user2230558

+0

在'case MotionEvent.ACTION_DOWN'的代码块之后需要'bre​​ak' 。 –

+0

o我正在删除大量的ACTION_DOWN和ACTION_MOVE之间的评论,我删除了这个break;以及。我更新了我的代码 – user2230558

相关问题