如何找出android中是否触摸了一个空的透明视图?

时间:2011-11-11 15:29:51

标签: android touch

我有一个ViewGroup,它填充了它的一部分大小,见图。 此ViewGroup还实现了onTouchListener。

是否有一种简单的方法可以找出透明或填充部分是否被触及? 类似于:ViewGroup.hasSomePixels(relativeX,relativeY)

see this image

4 个答案:

答案 0 :(得分:2)

如果你实现了onTouch方法,当触摸视图时你会看到你得到一个MotionEvent。

onTouch(View v, MotionEvent event) {...}

MotionEvent为您提供有关触摸位置的信息。您可以使用

在屏幕上获取原始像素坐标
event.getRawX();
event.getRawY();

或相对于视图的坐标

event.getX();
event.getY();

查看MotionEvent documentation以了解详情。

之后,您可以获取绘图缓存并获取该位置的像素值。

this.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(this.getDrawingCache());
this.setDrawingCacheEnabled(false);
int color = bitmap.getPixel(x, y);

然后你必须检查颜色是否透明。

答案 1 :(得分:2)

我认为图像是位图还是图片对吗?然后你可以这样做:

ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);

然后使用Color.red(pixel)等对颜色进行解码。不可否认,您需要跟踪任何偏移(如果图像对于屏幕来说太大而且可以拖动等等,但这是可能的。< / p>

如果您正在处理Canvas对象,请记住它只是将其全部写入位图,因此您仍然可以执行上述方法(一旦考虑了偏移量)。

答案 2 :(得分:0)

您可以通过致电:event.getX()和电子邮件vent.getY()获取被触及的点数。您可以通过调用以下方式获取屏幕尺寸:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

您可以执行以下操作:

if (event.getY() <= height / 2) {
     //upper part of the screen: green was touched
} else {
     //white was touched
}

答案 3 :(得分:0)

因为我正在使用Paths - 对我而言,它是通过路径环绕绿色区域并检查给定点x,y是否包含在路径中的解决方案。

由于路径不支持contains(x,y)方法,因此我使用了here所述的解决方法