当用户触摸具有对角线边的形状时如何检测触摸事件

时间:2018-01-13 15:06:17

标签: android canvas ontouchevent

我有一个视图,我在画布上画了一条路径。绘制的路径包含绘制形状的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();
                    }

1 个答案:

答案 0 :(得分:0)

} 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();
}