为google地图设置onclickListener而不覆盖之前的地图

时间:2012-08-16 13:51:24

标签: android google-maps

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被我的压力如何解决这个问题?

我尝试的事情:

  1. 我试图寻找一个getOnClickLisetener来保存它并在我的点击监听器上激活它但是没有这样的方法

  2. 我尝试创建MapOverlay类并将触摸功能复制到其onTouch方法,不仅地图没有移动,我还从map.getProjection()收到了null结果。

  3. 我怎么能克服这个?

3 个答案:

答案 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.mOnClickListenerCompositeListener个实例期间。

同时覆盖setOnClickListener方法,并将自定义MapView课程中设置的所有侦听器传递到CompositeListener实例。

最后使用CompositeListener方法将onClickListener个实例设置为MapView的{​​{1}}。

请记住,我没有对此进行过测试,因此可能需要一些额外的编码才能使其正常运行。