【问题标题】:How to detect a touch event when the user touches a shape that has a diagonal side当用户触摸具有对角边的形状时如何检测触摸事件
【发布时间】:2018-01-13 15:06:16
【问题描述】:

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

【问题讨论】:

  • 对角线在正方形内部还是也可能是矩形的对角线?
  • 查看我发布的图片。我基本上需要知道用户是否触摸了形状的两个对角边中的任何一个。
  • 我见过,但是对角线是连接多边形的 2 个顶点的线,它有 4 条或更多条边。即使你没有看到它们,它们也在那里

标签: android canvas touch-event


【解决方案1】:
} 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();
}

【讨论】:

  • 感谢您的回答。没有直接解决我的问题,但是帮我找到了解决办法。
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多