我需要仅为视图的可见部分应用点击/触摸事件。比如说大小为200X200的图像。除中心50X50外,其余部分是透明的。我想仅为50X50可见部分获取触摸事件而不是保留透明部分。
在上面的图像(单张图像)中,只有内部钻石有可见部分。除此之外,钻石是透明的区域。所以,如果我触摸Diamond,那么我只想做别的事情。
修改:
Rachita的链接帮助了我。我浏览了那个链接并了解了如何实现。但是在创建Points时我无法理解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表示,则触摸透明层,否则触摸图像的某些彩色部分。简单,但非常有效。看看它here。
答案 0 :(得分:4)
AFAIK你不能用onclick监听器或我的任何其他直接方式来实现它。你将不得不使用onTouchListener。
首先使用此How can I dynamically set the position of view in Android?
计算你的钻石占据的区域(你应该计算出图像的大小,以便计算钻石的面积)
3.仅当x,y落在所需区域时才触发onTouchListener中的动作。使用How to get the Touch position in android?
检查此link以计算给定点是否位于所需的平方
编辑
要了解android的坐标系,请参阅此链接How 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的相对值,即屏幕高度或宽度的某个比例,因为不同的设备具有不同的{{ 3}}
检查触摸点是否位于所需的多边形
我认为这些链接可能会帮助您确定触摸的点(您可以从onTouch事件中获取x,y eg.event.getX())位于您在问题中提到的点所需的多边形。 ppi和determine if a given point is inside the polygon