检查是否在onTouchEvent中的rectF内部按下

dub*_*bbe 5 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);
Run Code Online (Sandbox Code Playgroud)

到目前为止这么好,但在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 ;
}
Run Code Online (Sandbox Code Playgroud)

我将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 ;

}   
Run Code Online (Sandbox Code Playgroud)

kos*_*tja 2

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

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

或 2:RectF根据实际屏幕尺寸“非规范化”尺寸。

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

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


Display display = getWindowManager().getDefaultDisplay()您可以通过调用Activity 然后调用display.getWidth()或来检索屏幕尺寸display.getHeight()