Android:以圆形形状检测触摸事件

时间:2014-01-11 06:40:46

标签: android touch ontouchevent shapes

参考图像

enter image description here

在上图中。我想检测用户用哪个圈子粘他的手指。 如果用户触摸了黑色圆圈,则应显示一个“Toast in Black circle”的toast。 如果它是蓝色,那么“你在蓝圈”。 红色和黄色圈也是如此。

我知道如何检测触摸事件DOWN,MOVE,PRESS等以及x,y坐标。 但现在不要如何检测该图像中的圆形区域。


修改

实际上上面的图片只是为了让你了解我的问题。在实际场景中,我不想检测颜色像素。我想得到每个圆圈的确切区域。因为在我的情况下我的背景颜色和我的圆圈颜色可能相同。因此检测彩色像素并不能解决我的实际问题。

3 个答案:

答案 0 :(得分:1)

如果您知道圆圈的中心位置(我假设您知道每个圆环的宽度),只需计算触摸事件中心距离,如下所示。

@Override public boolean onTouchEvent(MotionEvent ev) {
    double distanceFromCenter = Math.sqrt((CENTER_X - ev.getX())^2 + (CENTER_Y - ev.getY())^2);
    //Figure out which ring it's in. 
}  

您还可以绘制一堆重叠的圆形,但这会更复杂。请参阅this开始使用。

答案 1 :(得分:0)

通过这个你可以获得红色,绿色,蓝色的比例:

final Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
imageView.setOnTouchListener(new OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent event){

        int x = (int)event.getX();
        int y = (int)event.getY();
        int pixel = bitmap.getPixel(x,y);

        int red = Color.red(pixel);
        int blue = Color.blue(pixel);
        int green = Color.green(pixel);

        Log.i("color", red+","+green+","+blue);
        return false;
    }
});

答案 2 :(得分:0)

您获得按下位置的像素颜色,然后检测它最接近的颜色并根据该显示Toast

How to get pixel color in Android?