在用户触摸MapView Android上返回GeoPoint

时间:2011-11-02 04:36:10

标签: android android-mapview

我无法找到一种方法来返回一个GeoPoint,其中包含用户刚触及的位置的经度和纬度。我已经看过并阅读了通过覆盖dispatchTouchEvent()来显示吐司的经度和纬度的吨或示例。 我认为这不符合我的理由,原因如下。

我希望用户能够单击一个按钮,然后再调用另一个方法,该方法将在用户下一次点击时返回一个地理位置。因此,简而言之,只有在用户点击按钮后才会在点击上返回地理位置。

我可以使用dispatchTouchEvent()看到的唯一解决方法如下:

如果已单击该按钮,请写入共享首选项。然后在dispatchTouchEvent()中检查按钮是否已被点击。如果没有单击,则不执行任何操作。如果已单击,则将经度和纬度写入共享首选项,然后从共享首选项中读取它们,并使用其他方法从中创建GeoPoint。

我觉得这不是一个非常优雅的想法。我觉得应该有一个更清洁的方式这样做(就像某种方式只返回一个地理位置)

我希望这有点意义。我会尽力回答任何问题。

提前致谢。

1 个答案:

答案 0 :(得分:3)

我刚读了你问题的标题。如果错误的回答那么请原谅我......:D

    mapView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            GeoPoint p = null;

            if (event.getAction() == MotionEvent.ACTION_UP) {
                p = mapView.getProjection().fromPixels((int) event.getX(),
                        (int) event.getY());
                mapBackButton.setText(p.getLatitudeE6() / 1E6 + ","
                        + p.getLongitudeE6() / 1E6 + "Action is : "
                        + event.getAction());
                return true;
                Toast.makeText(
                        getBaseContext(),
                        p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6()
                                / 1E6 + "Action is : " + event.getAction(),
                        Toast.LENGTH_SHORT).show();
            }
            return false;
        }
    });