我有一个ViewGroup,它填充了它的一部分大小,见图。 此ViewGroup还实现了onTouchListener。
是否有一种简单的方法可以找出透明或填充部分是否被触及?
类似于:ViewGroup.hasSomePixels(relativeX,relativeY)
?
答案 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所述的解决方法