检查是否在onTouchEvent中按下了rect

时间:2011-12-08 09:46:41

标签: android canvas ontouchevent

我一直在使用扩展视图处理一个非常简单的小应用程序。 问题是我找不到我的onTouchEvent中的内容。 我已经明白我要将压力点(x和y)与元素进行比较,看看它可能是哪一个。

但是... 我用:

声明了一个矩形
Paint color= new Paint();
color.setColor(Color.BLACK);
rectF = new RectF(0.0f, 0.0f, 1.0f, 0.5f) ;
canvas.drawRect(rectF, color);

到目前为止一切顺利,但在onTouchEvent函数中

public boolean onTouchEvent(MotionEvent event) {
    int action = event.getAction() ;
    float x = event.getX() ;
    float y = event.getY() ;

    switch(action) {
    case MotionEvent.ACTION_DOWN:

        if(rectF().contains(x, y)) {
            // Something should happen
        }

    }

    invalidate();
    return true ;
}

我将rectF设置为0-1范围内的某种相对点,但是根据屏幕大小,X和Y从事件的范围是0到更高。

我可以轻松转换其中任何一个值吗?

修改

认为某人对最终解决方案感兴趣...

public boolean onTouchEvent(MotionEvent event) {
    int action = event.getAction() ;
    float x = event.getX() ;
    float y = event.getY() ;

    int width = this.getWidth() ;
    int height = this.getHeight() ;

    switch(action) {
    case MotionEvent.ACTION_DOWN:

        if(rectF().contains(x/width, y/height)) {
            // Something should happen
        }

    }

    return true ;

}   

1 个答案:

答案 0 :(得分:2)

触摸点和RectF的值必须在相同的参考标度上才能正确比较。这意味着如果您声明RectF使用相对大小(0-1),您将需要:

1:按屏幕尺寸标准化MotionEvent位置

OR 2:根据您的实际屏幕尺寸“{归一化”RectF尺寸。

我认为1通常是首选,因为它允许您根据相对布局定义您的rects,与实际屏幕大小无关,并即时转换事件位置。

像这样:rectF.contains(x/screenWidth, y/screenHeight);

您可以在“活动”中调用“Display display = getWindowManager().getDefaultDisplay()”,然后拨打display.getWidth()display.getHeight()

来检索屏幕尺寸