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