我在GoogleMap中有一个InfoWindow,其中包含按钮,并尝试使用chose007的hack变体使其正常工作(请参见此question)。
我的方法依赖于获取InfoWindow内部按钮的屏幕坐标,并在
但是,所有获取屏幕坐标的尝试都失败了。我在
我认为这是因为InfoWindow是某种特殊情况而不是实际的UI元素?(如果我没记错,整个视图基本上只是一个被位于地图顶部的位图复制的东西?)有没有办法获取坐标?我应该提到,我正在尝试避免任何涉及魔术数字的事情,例如链接中chose007的解决方案。
这是我正在做的简化说明:
我的方法依赖于获取InfoWindow内部按钮的屏幕坐标,并在
onDispatchTouchEvent
函数中对其进行操作。但是,所有获取屏幕坐标的尝试都失败了。我在
onDispatchTouchEvent
内调用它(即在创建后很长时间),但是我得到的是按钮和视图的0,0坐标。我认为这是因为InfoWindow是某种特殊情况而不是实际的UI元素?(如果我没记错,整个视图基本上只是一个被位于地图顶部的位图复制的东西?)有没有办法获取坐标?我应该提到,我正在尝试避免任何涉及魔术数字的事情,例如链接中chose007的解决方案。
这是我正在做的简化说明:
public boolean onDispatchTouchEvent(MotionEvent ev) {
int[] location = new int[2];
mTestButton.getLocationOnScreen(location); // Returns 0,0
mTestView.getLocationOnScreen(location); // Returns 0,0
return false;
}
public View getInfoContents(Marker marker) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mTestView = inflater.inflate(R.layout.info_window, null);
mTestButton = ((Button) mTestView.findViewById(R.id.test_button));
}
View
层次结构的一部分。获取它们的定位的唯一方法是通过chose007答案中的“魔法数字”,该数字从Marker
的位置和信息窗口的尺寸计算出来,假设默认锚定和旋转。我还推导出了一个更通用的实现,允许自定义锚定和旋转,并使信息窗口保持活动状态,而无需通过触摸监听器进行修改,这些都在答案的评论中进行了讨论。 - corsair992PopupWindow
,将其锚定到标记坐标。 - S.D.