Android:如何确定打开上下文菜单的长按的屏幕坐标

时间:2010-12-31 21:02:42

标签: android contextmenu coordinates

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

我想根据印刷机的位置改变菜单的内容,但我看不出如何找到该位置。提供给onCreateContextMenu的参数似乎都不提供该信息。

1 个答案:

答案 0 :(得分:3)

棘手的,只是在黑暗中刺伤我害怕...

你没有提到你的'主视图'类是什么,但是如果它是'原生'的安卓类,那么你可以自己扩展你正在使用的类。

为您的班级提供公共X和Y数据成员,例如......

public int lastKnownX; // Might be float types - can't remember
public int lastKnownY;

同样在您的课程中,覆盖onTouch(View v, MotionEvent event)并检查MotionEvent以查看它是否为ACTION_DOWN事件 - 如果是,请将X和Y坐标存储在{{ 1}}和lastKnownX。 - 忽略任何其他事件,并确保无论运动动作如何都始终返回false(以使过程透明)。

我的理论是,当解释长按/按下时,您最后知道的lastKnownY坐标将是长按开始的位置,因为它们可以被您的活动访问(您定义了它们)作为公共),ACTION_DOWN方法将能够使用它们。

另一方面,我可能会离开,但这就是我如何解决这个问题。值得一试。 : - )