gpt4 book ai didi

android - 如果在 onTouchEvent 中的 rectF 内按下,则 checkin

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:38 25 4
gpt4 key购买 nike

我一直在使用扩展 View 开发一个非常简单的小应用程序。问题是我找不到在我的 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/screenWidth, y/screenHeight);

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

关于android - 如果在 onTouchEvent 中的 rectF 内按下,则 checkin ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8428994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com