当用户触摸具有对角线的形状时如何检测触摸事件
How to detect a touch event when the user touches a shape that has a diagonal side
我有一个视图,我在 canvas 上绘制了一条路径。绘制的路径包含绘制形状的 x 和 y 坐标。该形状有 2 个对角线边。我需要做的是检测用户何时触摸这些对角线中的任何一个。我能够检测到用户何时触摸了形状的垂直和水平边,但我无法找到如何对路径中的对角线执行相同的操作。
我只需知道线两端的 x 和 y 值并检查用户是否在这些值范围内触摸了屏幕,就能够确定触摸的是水平线还是垂直线。但是,不能对对角线执行相同的方法,所以我想知道我将如何处理这个问题。
这是我用坐标绘制的形状的图像:
Image of Shape
onTouchEvent 方法:
@Override
public boolean onTouchEvent(MotionEvent ev) {
//The Top is touched
if ((ev.getX() >= x1 && ev.getX() <= x2 && ev.getY() >= y1 && ev.getY() <= y1)) {
Toast.makeText(this.getContext(), "Top Touched", Toast.LENGTH_SHORT).show();
}
//The Bottom is touched
else if ((ev.getX() >= x4 && ev.getX() <= x3 && ev.getY() >= y3 && ev.getY() <= y3)) {
Toast.makeText(this.getContext(), "Bottom Touched", Toast.LENGTH_SHORT).show();
}
//The Left Side is touched
else if ((ev.getY() >= y2 && ev.getY() <= y3 && ev.getX() >= x4 && ev.getX() <= x4)) {
Toast.makeText(this.getContext(), "Left Side Touched", Toast.LENGTH_SHORT).show();
}
//The Right Side is touched
else if ((ev.getY() >= y2 && ev.getY() <= y3 && ev.getX() >= x3 && ev.getX() <= x3)) {
Toast.makeText(this.getContext(), "Right Side Touched", Toast.LENGTH_SHORT).show();
}
} else if ((ev.getX() < x1 && ev.getY() < y2) &&
(ev.getX() - x4 = (ev.getY - y1) * ((x1-x4)/(y2-y1))) {
Toast.makeText(this.getContext(), "Left Top
Touched",Toast.LENGTH_SHORT).show();
} else if ((ev.getX() > x2 && ev.getY() < y2) &&
(ev.getX() - x2 = (ev.getY - y1) * ((x3-x2)/(y2-y1)) {
Toast.makeText(this.getContext(), "Right Top Touched",
Toast.LENGTH_SHORT).show();
}
我有一个视图,我在 canvas 上绘制了一条路径。绘制的路径包含绘制形状的 x 和 y 坐标。该形状有 2 个对角线边。我需要做的是检测用户何时触摸这些对角线中的任何一个。我能够检测到用户何时触摸了形状的垂直和水平边,但我无法找到如何对路径中的对角线执行相同的操作。
我只需知道线两端的 x 和 y 值并检查用户是否在这些值范围内触摸了屏幕,就能够确定触摸的是水平线还是垂直线。但是,不能对对角线执行相同的方法,所以我想知道我将如何处理这个问题。
这是我用坐标绘制的形状的图像:
Image of Shape
onTouchEvent 方法:
@Override
public boolean onTouchEvent(MotionEvent ev) {
//The Top is touched
if ((ev.getX() >= x1 && ev.getX() <= x2 && ev.getY() >= y1 && ev.getY() <= y1)) {
Toast.makeText(this.getContext(), "Top Touched", Toast.LENGTH_SHORT).show();
}
//The Bottom is touched
else if ((ev.getX() >= x4 && ev.getX() <= x3 && ev.getY() >= y3 && ev.getY() <= y3)) {
Toast.makeText(this.getContext(), "Bottom Touched", Toast.LENGTH_SHORT).show();
}
//The Left Side is touched
else if ((ev.getY() >= y2 && ev.getY() <= y3 && ev.getX() >= x4 && ev.getX() <= x4)) {
Toast.makeText(this.getContext(), "Left Side Touched", Toast.LENGTH_SHORT).show();
}
//The Right Side is touched
else if ((ev.getY() >= y2 && ev.getY() <= y3 && ev.getX() >= x3 && ev.getX() <= x3)) {
Toast.makeText(this.getContext(), "Right Side Touched", Toast.LENGTH_SHORT).show();
}
} else if ((ev.getX() < x1 && ev.getY() < y2) &&
(ev.getX() - x4 = (ev.getY - y1) * ((x1-x4)/(y2-y1))) {
Toast.makeText(this.getContext(), "Left Top
Touched",Toast.LENGTH_SHORT).show();
} else if ((ev.getX() > x2 && ev.getY() < y2) &&
(ev.getX() - x2 = (ev.getY - y1) * ((x3-x2)/(y2-y1)) {
Toast.makeText(this.getContext(), "Right Top Touched",
Toast.LENGTH_SHORT).show();
}