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)
触摸点和 RectF 的值必须处于相同的参考比例才能正确比较。这意味着如果您声明RectF使用相对大小 (0-1),您将需要:
1:MotionEvent根据屏幕尺寸标准化位置
或 2:RectF根据实际屏幕尺寸“非规范化”尺寸。
我认为 1 通常更可取,因为它允许您根据相对布局定义矩形,与实际屏幕尺寸无关,并即时转换事件位置。
像这样 :rectF.contains(x/screenWidth, y/screenHeight);
Display display = getWindowManager().getDefaultDisplay()您可以通过调用Activity 然后调用display.getWidth()或来检索屏幕尺寸display.getHeight()
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |