我想构建一个具有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的指导。
答案 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