Phi*_*hil 9 events android pixel android-canvas
我正在使用一个MotionEventAndroid在Android中捕获一个长按.然后,我需要将坐标转换为画布坐标,我可以从中生成自定义地图坐标(而不是Google地图).SurfaceViewGestureListenerMotionEvent
从我所读到的,我采取了给定MotionEvent e,e.getX()并e.getY()得到像素坐标.如何将这些坐标转换为SurfaceView画布坐标?
这是我GestureListener的聆听长时间点击:
/**
* Overrides touch gestures not handled by the default touch listener
*/
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public void onLongPress(MotionEvent e) {
Point p = new Point();
p.x = (int) e.getX();
p.y = (int) e.getY();
//TODO translate p to canvas coordinates
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
编辑: 这是否与屏幕尺寸/分辨率/深度和画布'Rect对象有关?
您可以尝试使用MotionEvent.getRawX()/getRawY()方法而不是getX()/getY().
// get the surfaceView's location on screen
int[] loc = new int[2];
surfaceView.getLocationOnScreen(loc);
// calculate delta
int left = e.getRawX()-loc[0];
int top = e.getRawY()-loc[1];
Run Code Online (Sandbox Code Playgroud)
好吧,你有x,y显示的屏幕px,你可以通过以下方式调用canvas px:
Canvas c = new Canvas();
int cx = c.getWidth();
int cy = c.getHeight();
...
Display display = getWindowManager().getDefaultDisplay();
int sx = display.getWidth();
int sy = display.getHeight();
Run Code Online (Sandbox Code Playgroud)
然后,您可以进行数学计算以在视图和屏幕中使用给定的px映射屏幕触摸视图.
canvasCoordX = p.x*((float)cx/(float)sx);
canvasCoordY = p.y*((float)cy/(float)sy);
Run Code Online (Sandbox Code Playgroud)
有关屏幕管理器的更多信息,请参阅http://developer.android.com/reference/android/view/WindowManager.html.我认为它需要在一个活动中初始化才能工作.
如果我理解正确的话,你在表面视图中有一个画布视图。如果是这样尝试VIEW.getLeft() | getTop()返回 left | 视图相对于其父视图的顶部位置。
float x= e.getX() - canvasView.getLeft();
float y= e.getY() - canvasView.getTop();
Run Code Online (Sandbox Code Playgroud)