1

我只需要为视图的可见部分应用点击/触摸事件。例如,大小为 200X200 的图像。除了中心50X50,其余部分是透明的。我只想获得 50X50 可见部分的触摸事件,而不是剩余的透明部分。

在此处输入图像描述

在上面的图像(它的单一图像)中,只有内部的 Diamond 有可见的部分。除此之外,钻石是透明区域。所以,如果我碰了钻石,那么我只想做其他事情而忽略。

编辑 :

Rachita 的链接帮助了我。我浏览了该链接并知道如何实施。但是在创建点时我无法理解一些常量,例如 320、240 等。就我而言,我知道钻石(在上图中)x 和 y Ponits(实际上是硬编码值)。那么,使用这些我如何确定我是在 Diamond 内部还是外部触摸?

我的钻石积分如下

    pointA = new Point(0, 183);
    pointB = new Point(183, 0);
    pointC = new Point(366, 183);
    pointD = new Point(183, 366);

编辑 :

终于从Luksprog得到了解决方案。它基于检查触摸点像素颜色。如果颜色为 0,则表示您触摸了透明层,否则您触摸了图像的某些彩色部分。简单,但非常有效。看看这里

4

1 回答 1

4

AFAIK 你不能用 onclick 监听器或我的任何其他直接方式来实现它。你必须使用 onTouchListener 。

  1. 首先使用此方法在特定(x,y)位置动态设置视图如何在Android中动态设置视图位置?

  2. 计算您的钻石将占据的区域(您应该知道图像的大小以计算钻石的面积)

3.onTouchListener中只有x、y落在需要的区域时才触发动作。使用如何在 android 中获取 Touch 位置?

检查此链接以计算给定点是否位于所需的正方形中

编辑

要了解 android 的坐标系,请参阅此链接 How do do android screen coordinates work?

 Display mdisp = getWindowManager().getDefaultDisplay();
    int maxX= mdisp.getWidth();
    int maxY= mdisp.getHeight();

(x,y) :-

1) (0,0) 是左上角。

2) (maxX,0) 是右上角

3) (0,maxY) 是左下角

4) (maxX,maxY) 是右下角

这里 maxX 和 maxY 是以像素为单位的屏幕最大高度和宽度,我们在上面给定的代码中检索到了它们。

请记住,如果您想支持具有不同屏幕尺寸的多个设备,请确保您使用 x,y 的相对值,即屏幕高度或宽度的某个比率,因为不同的设备具有不同的ppi

检查接触点是否位于所需的多边形中

我认为这些链接可能会帮助您确定触摸的点(您可以从 onTouch 事件 eg.event.getX() 获取 x,y)是否位于您在问题中提到的点的所需多边形中。确定给定点是否在多边形内以及如何确定 2D 点是否在多边形内?

于 2013-06-21T12:50:49.723 回答