触摸事件以显示图像的可见部分

时间:2013-06-21 12:35:37

标签: android image image-processing touch visibility

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

enter image description here

在上面的图像(单张图像)中,只有内部钻石有可见部分。除此之外,钻石是透明的区域。所以,如果我触摸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

1 个答案:

答案 0 :(得分:4)

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

  1. 首先使用此How can I dynamically set the position of view in Android?

  2. 在特定的(x,y)位置动态设置视图
  3. 计算你的钻石占据的区域(你应该计算出图像的大小,以便计算钻石的面积)

  4. 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())位于您在问题中提到的点所需的多边形。 ppidetermine if a given point is inside the polygon