gpt4 book ai didi

android - 如何在 Android 中使透明区域对于 ImageView 不可触摸?

转载 作者:行者123 更新时间:2023-11-30 03:59:36 26 4
gpt4 key购买 nike

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

最佳答案

正如@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. 更复杂的是,它可能是您即时构建的图像,并且永远无法以可搜索的方式真正知道它的最终状态。如果是这种情况,您将需要在创建图像时构建一个单独的 bool 值二维数组,以确定哪些点不透明,哪些点不透明。

关于android - 如何在 Android 中使透明区域对于 ImageView 不可触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com