Imageview没有跟随手指触摸

时间:2017-06-05 12:27:59

标签: android ontouchevent motionevent

我想构建一个具有imageview的应用程序,它只需按手指触摸即可。换句话说,图像视图跟随手指的触摸。我已经部分实现了这一点,因为图像视图跟随手指的触摸,但问题是它处于某种偏移。图像视图距离实际触摸大约一英寸。

以下是我的代码:

public class MainActivity extends AppCompatActivity {

ImageView img;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    img = (ImageView)findViewById(R.id.img1);
    img.setImageResource(R.drawable.ic_remove_circle_black_24dp);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
    img.setX(event.getX());
    img.setY(event.getY());
    return false;
}

}

偏移背后的原因是什么?

编辑:解决方案

以下代码可以满足我的需求:

public class MainActivity extends AppCompatActivity {

    ImageView img;
    int[] viewCoords = new int[2];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img = (ImageView)findViewById(R.id.img1);
        img.setImageResource(R.drawable.ic_remove_circle_black_24dp);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event){
        img.getLocationOnScreen(viewCoords);
        img.setX(event.getX()-(viewCoords[0]-img.getX()));
        img.setY(event.getY()-(viewCoords[1]-img.getY()));
        return true;

    }
}

感谢Doomsknight的指导。

1 个答案:

答案 0 :(得分:0)

从我所看到的,您正在使用屏幕的触摸事件的X和Y坐标。

然后在 ImageView 的X和Y上绘制此坐标。

这会导致你看到的偏移,因为它们不匹配,因为imageview可能不在屏幕的最顶层。

我认为你要做的是获得实际图像的X和Y. 因此,您需要相应地偏移坐标。

有一个很好的例子就是获取偏移量并将其删除:请参阅下面的链接。

https://stackoverflow.com/a/11312423/940834

  

您可以按如下方式获取视图的左上角:

 int[] viewCoords = new int[2];
 imageView.getLocationOnScreen(viewCoords); 
     

从此和触摸      坐标可以计算ImageView中的点:

 int touchX = (int) event.getX(); 
 int touchY = (int) event.getY();

 int imageX = touchX - viewCoords[0]; // viewCoords[0] is the X coordinate 
 int imageY = touchY - viewCoords[1]; // viewCoords[1] is the y coordinate