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

标签 android imageview transparent

我在谷歌上搜索了很多,但找不到任何有用的东西。我有一个复杂的 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/

相关文章:

ios - 一指图像缩放/裁剪

java - ImageView 折叠并且不显示创建的缩略图

HTML/CSS : semi transparent header - without content/overlay

transparent - 如何让mbtiles背景透明?

java - 选择查询星期几?

android - 为什么 Android 应用程序在添加启动新 Activity 的按钮后会崩溃?

android - 新的 Google Play 商店隐私政策要求

Android 将 WebView 复制到 Webview

java - 从 uri android 加载图像

html - 导航栏透明问题