Android 如果在onTouchEvent中的rectF内按下,则签入

Android 如果在onTouchEvent中的rectF内按下,则签入,android,canvas,touch-event,Android,Canvas,Touch Event,我一直在使用扩展视图开发一个非常简单的小应用程序。 问题是我找不到我的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中被按下的内容。 我知道我必须将压力点(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 ;
}
我用0-1范围内的一些相对点设置了rectF,但是根据屏幕大小,我从事件中得到的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 ;

}   

接触点和RectF的值必须在相同的参考刻度上,以便进行适当的比较。这意味着如果您声明您的
RectF
使用相对大小(0-1),您需要:

1:根据屏幕大小规范化
MotionEvent
位置

或2:根据实际屏幕大小对
RectF
尺寸进行“反规范化”

我认为1通常更可取,因为它允许您根据相对布局定义矩形,与实际屏幕大小无关,并动态转换事件位置

如下:
rectF.contains(x/屏幕宽度,y/屏幕高度)


通过在活动中调用
Display Display=getWindowManager().getDefaultDisplay()
,然后调用
Display.getWidth()
Display.getHeight()

可以检索屏幕尺寸。我发现我更想要视图的宽度和高度,所以我使用了
this.getHeight()
改为this.getWidth()
。@当然,我不知道你的背景,所以我就我所知道的最简单的案例给出了建议,这是一个完美的建议,我只是澄清一下,以防其他人正在搜索相同的东西!