【问题标题】:Touch event for visible part of the Image图像可见部分的触摸事件
【发布时间】:2013-06-18 14:13:20
【问题描述】:

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

在上面的图像(它的单一图像)中,只有内部的 Diamond 有可见的部分。除此之外,钻石是透明区域。所以,如果我碰了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,则表示您触摸了透明层,否则您触摸了图像的某些彩色部分。简单,但非常有效。看看here

【问题讨论】:

  • 这些对象 x,x,x,x,V 只是图像还是组件?
  • 它们既不是单独的图像也不是组件...它的 1 个完整图像...我标记它们是为了让人们理解...我只想在触摸 Diamond 时收到通知,否则忽略。 ..
  • @Luksprog - 这很有趣。让我看看。谢谢你。
  • @Luksprog - 我简直不敢相信。它的工作!它正是我想要的。它是如此简单。非常感谢你。

标签: android image image-processing touch visibility


【解决方案1】:

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

  1. 首先使用How can I dynamically set the position of view in Android?在特定 (x,y) 位置动态设置您的视图

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

3.onTouchListener 中只有当x、y 落在所需区域时才触发动作。使用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 的相对值,即屏幕高度或宽度的某个比率,因为不同的设备有不同的@987654325 @

检查接触点是否在所需的多边形内

我认为这些链接可能会帮助您确定触摸的点(您可以从 onTouch 事件 eg.event.getX() 获取 x,y)是否位于您在问题中提到的点的所需多边形中。 determine if a given point is inside the polygonHow can I determine whether a 2D Point is within a Polygon?

【讨论】:

  • 那个算法很有趣。会试试的。谢谢。
  • 他也许可以通过调查显示的位图来检查是否触摸到了钻石,这取决于他显示钻石的方式。我不知道应该怎么做,如果他使用简单的位图而不是画线。
  • @androiddeveloper - 根据 Rachita 的链接,我认为非常接近......我唯一不明白的是创建点概念......在那个链接中,他们使用了一些硬编码值,如 320 , 240 等等...如果我能做到,剩下的事情就足够简单了,可以理解和实现...
  • @Braj 我认为这些链接可能会帮助您确定触摸的点(您可以从 onTouch 事件 eg.event.getX() 获取 x,y)是否位于您提到的点所需的多边形中在问题中。 stackoverflow.com/questions/217578/…stackoverflow.com/questions/5223909/…
  • @RachitaNanda - 谢谢你。我对屏幕坐标和所有东西都很了解。这里的要求完全不同。粗略地说,就像将钻石作为单独的区域表示为 ex,将其表示为 Rect,然后检查触摸点是否位于该区域内......即使它也是硬编码,也可以......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多