我用谷歌搜索了很多,但找不到任何有用的东西。我有一个复杂的 png 图像,我想让它可以触摸,但仅限于它的不透明区域。我为它设置了一个触摸监听器,但即使我点击了一个透明区域,它也会发送,这就是我不想要的。
问问题
2259 次
3 回答
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,您需要通过以下三种方式之一来实现它:
在这种情况下,图像可能很容易分割成不透明和不透明的区域:
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; }
以这种方式处理图像可能并不容易,在这种情况下,您将需要使用 x 和 y 触摸位置来检查源图像(缩放到它在屏幕上的大小)是否该点是不透明的。编辑:您在下面对@vinod 的评论中似乎以一种相当简洁的方式使用了此解决方案,因此我建议其他读者也检查该评论。
更复杂的是,它可能是您在运行中构建的图像,并且从未真正以可搜索的方式知道它的最终状态。如果是这种情况,您将需要在创建图像时建立一个单独的 2D 布尔数组,以确定哪些点是不透明的,哪些不是。
于 2012-10-03T09:32:51.950 回答
0
触摸侦听器适用于整个视图,而不是视图的一部分。所以我建议您将图像分成小块,并在每块不透明的部分上添加触摸侦听器。希望可以帮助您获得更多帮助您也可以尝试在此处发布图片,以便我们可以更好地看到您想要实现的目标..
于 2012-10-03T09:03:22.960 回答
0
@user1716538:你为什么不使用 png 图片?您可以使用 png 图像删除图像中不需要的部分,因此图像的这些部分不会发生单击事件。
于 2012-10-03T09:24:22.803 回答