我google了很多但找不到任何有用的东西。我有一个复杂的png图像,我想让它可触摸,但仅限于它的不透明区域。我为它设置了一个触摸监听器,但即使我点击了一个透明区域,它就会发送,这就是我不想要的。
答案 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,您将需要以三种方式之一实现:
图像可能很容易划分为不透明和非透明区域,在这种情况下:
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的评论中以相当简洁的方式使用了此解决方案,因此我建议其他读者也检查该评论。
更复杂的是,它可能是您正在构建的图像,并且从未真正以可搜索的方式知道它的最终状态。如果是这种情况,则需要在创建图像时建立单独的二维布尔数组,以确定哪些点是不透明的,哪些不是。
答案 1 :(得分:0)
触控侦听器适用于整个视图而不适用于视图的一部分..因此我建议您将图像分割成小块,并在每个不透明的部分上添加触控侦听器。 我希望能帮助你,获得更多帮助你也可以尝试在这里发布图片,这样我们就可以更好地看到你想要实现的目标..
答案 2 :(得分:0)
@ user1716538:为什么不使用png图像? U可以使用png图像删除图像中不需要的部分,因此点击事件不会出现在图像的那些部分上。