Android:如何确定打开关联菜单的长按的屏幕坐标

Android:如何确定打开关联菜单的长按的屏幕坐标,android,contextmenu,coordinates,Android,Contextmenu,Coordinates,我的应用程序的主视图显示一个图形画布。主活动的onCreate方法包含命令registerForContextMenu(mapview)因此,当用户长按此视图时,将打开一个上下文菜单,其内容在活动的onCreateContextMenu(ContextMenu,View v,ContextMenuInfo menuInfo)方法中定义 我想根据媒体的位置改变菜单的内容,但我不知道如何找到那个位置。提供给onCreateContextMenu的参数似乎都没有提供这些信息。棘手的一个,恐怕只是暗中捅

我的应用程序的主视图显示一个图形画布。主活动的onCreate方法包含命令
registerForContextMenu(mapview)因此,当用户长按此视图时,将打开一个上下文菜单,其内容在活动的
onCreateContextMenu(ContextMenu,View v,ContextMenuInfo menuInfo)
方法中定义


我想根据媒体的位置改变菜单的内容,但我不知道如何找到那个位置。提供给onCreateContextMenu的参数似乎都没有提供这些信息。

棘手的一个,恐怕只是暗中捅了一刀

你没有提到你的“主视图”类是什么,但是如果它是一个“本机”android类,那么你可以派生出你自己的,扩展你当前使用的那个

为类提供公共的X和Y数据成员,例如

public int lastKnownX; // Might be float types - can't remember
public int lastKnownY;
同样在您的类中,重写
onTouch(查看v,运动事件)
并检查
MotionEvent
以查看它是否是
动作_DOWN
事件-如果是,将X和Y坐标存储在
lastKnownX
lastKnownY
-忽略任何其他事件,并确保无论运动动作如何,始终返回false(以使过程透明)

我的理论是,当一次长时间的点击/按下被解释时,你最后知道的
ACTION\u DOWN
坐标将是长时间点击开始的坐标,因为你的活动可以访问它们(你将它们定义为public),所以
onCreateContextMenu()
方法将能够使用它们


另一方面,我可能有点偏离了,但这就是我解决问题的方法。值得一试。:-)

谢谢。我已经按照你的建议做了(只做了一次修改……我已经有了一个MyGestureDetector类,它扩展了SimpleGestureListener;它包含一个
onDown(MotionEvent e)
方法,在任何按下按钮的开始都会调用该方法,因此我将代码放在那里,从
e.getX()
e.getY()
获取坐标。)这似乎很好。@prepbgg:好的,太好了,很高兴我的建议有用。