Android如何在relativelayout中拖动imageview然后将其恢复到原位

时间:2013-04-01 05:03:28

标签: android android-layout drag-and-drop android-imageview ontouchevent

我正在尝试使用onTouchListener使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

2 个答案:

答案 0 :(得分:2)

当移动开始时,您需要使用x_offset的初始位置初始化偏移(即y_offsetImageView)。

然后,移动应修改如下:

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

这将阻止您从与ImageView开始的位置不同的位置开始拖动。

答案 1 :(得分: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);