如何让Android中的ImageView无法触及透明区域?

时间:2012-10-03 08:57:07

标签: android imageview transparent

我google了很多但找不到任何有用的东西。我有一个复杂的png图像,我想让它可触摸,但仅限于它的不透明区域。我为它设置了一个触摸监听器,但即使我点击了一个透明区域,它就会发送,这就是我不想要的。

3 个答案:

答案 0 :(得分:1)

正如@Cata所说,触摸事件将与整个图像相关联。但是,触摸事件会告诉您触摸的图像在哪里,因此可以编写类似这样的代码(忽略检查正确的操作等):

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean eventHandled = false;

    int x = (int) (event.getX());
    int y = (int) (event.getY());
            if (imageIsOpaque(x,y) {
                 //Do the stuff

                 eventHandled = true;
            }

    return eventHandled;
}

这里的关键是imageIsOpaque,您将需要以三种方式之一实现:

  1. 图像可能很容易划分为不透明和非透明区域,在这种情况下:

    boolean imageIsOpaque(int touchX, int touchY) {
        ArayList<Rect> rectsOfOpaqueness; // You will need to define these ...
    
        boolean isOpaque = false;
        for (int i=0; i<rectsOfOpaqueness.size() && !isOpaque; i++) {
        if (rectsOfOpaqueness.get(i).contains(touchX, touchY)) {
            isOpaque = true;
            }
    
        return isOpaque;
    }
    
  2. 图像可能不容易处理,在这种情况下,您需要使用x和y触摸位置来检查源图像(缩放到屏幕上的大小)是否点是不透明的。编辑:您似乎在下面对@vinod的评论中以相当简洁的方式使用了此解决方案,因此我建议其他读者也检查该评论。

  3. 更复杂的是,它可能是您正在构建的图像,并且从未真正以可搜索的方式知道它的最终状态。如果是这种情况,则需要在创建图像时建立单独的二维布尔数组,以确定哪些点是不透明的,哪些不是。

答案 1 :(得分:0)

触控侦听器适用于整个视图而不适用于视图的一部分..因此我建议您将图像分割成小块,并在每个不透明的部分上添加触控侦听器。 我希望能帮助你,获得更多帮助你也可以尝试在这里发布图片,这样我们就可以更好地看到你想要实现的目标..

答案 2 :(得分:0)

@ user1716538:为什么不使用png图像? U可以使用png图像删除图像中不需要的部分,因此点击事件不会出现在图像的那些部分上。