private LocationManager manager;
private TextView tv;
private MapController control;
private GeoPoint chosen = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.placechooser);
final MapView map = (MapView) findViewById(R.id.gmap);
tv=(TextView) findViewById(R.id.textView1);
map.setBuiltInZoomControls(true);
map.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
chosen = map.getProjection().fromPixels(
(int) event.getX(), (int) event.getY());
tv.setText((chosen.getLatitudeE6() / (Math.pow(10,6)) + "," + (chosen.getLongitudeE6() / (Math.pow(10,6)))));
return true;
}
});
此代码片段工作,所有,我可以看到谷歌地图,当我按下地图上的某些点我在我的TextView上得到预期的结果,但地图没有移动,没有响应,因为它应该,我猜内置onclicklistener被我的压力如何解决这个问题?
我尝试的事情:
我试图寻找一个getOnClickLisetener来保存它并在我的点击监听器上激活它但是没有这样的方法
我尝试创建MapOverlay类并将触摸功能复制到其onTouch方法,不仅地图没有移动,我还从map.getProjection()收到了null结果。
我怎么能克服这个?
答案 0 :(得分:0)
尝试
control = map.getController();
答案 1 :(得分:0)
创建扩展Mapview的CustomMapview。
在其中,重写onInterceptTouchEvent(MotionEvent ev)方法。
像这样:public boolean onInterceptTouchEvent(MotionEvent ev) {
//your logic
return super.onInterceptTouchEvent(ev);
}
在您的逻辑中,您可以触发自定义侦听器,这将告知您的活动已按下哪个坐标,以便您可以相应地更新文本视图
答案 2 :(得分:0)
它有点复杂但你应该能够通过继承MapView
来做到这一点。
在MapView
类中创建一个内部成员类(让我们称之为CompositeListener
),类似于这个问题中的答案:android- multi onClick listener in one button并创建该类的实例。
在onCreate
通过MapView.mOnClickListener
到CompositeListener
个实例期间。
同时覆盖setOnClickListener
方法,并将自定义MapView
课程中设置的所有侦听器传递到CompositeListener
实例。
最后使用CompositeListener
方法将onClickListener
个实例设置为MapView
的{{1}}。
请记住,我没有对此进行过测试,因此可能需要一些额外的编码才能使其正常运行。