检测屏幕上的坐标

时间:2013-04-08 19:21:22

标签: android

我想用手指检测屏幕上触摸的地图坐标。问题是当我用手指触摸屏幕时,坐标不会显示为吐司。 我正在使用Google Maps v2。我的代码:

@Override
public boolean onTouchEvent(MotionEvent event) 
{
    if (event.getAction() == MotionEvent.ACTION_POINTER_DOWN) 
    {
        CrearLugar();
    }

    return super.onTouchEvent(event);
}

public void CrearLugar()
{
    final GoogleMap mMap=null;

    mMap.setOnMapClickListener(new OnMapClickListener() {
        public void onMapClick(LatLng point) {
            Projection proj=mMap.getProjection();
            Point coord = proj.toScreenLocation(point);

            Toast.makeText(
                MapaLugaresActivity.this,
                "Click\n" +
                "Lat: " + point.latitude + "\n" +
                "Lng: " + point.longitude + "\n" +
                "X: " + coord.x + " - Y: " + coord.y,
                Toast.LENGTH_SHORT).show();
        }
    });
}

除非我用手指触摸屏幕,否则一切都是正确的。当我这样做时,我想显示被触摸的地方的坐标,但我看不到任何东西,只有地图。

怎么了?

感谢。

1 个答案:

答案 0 :(得分:1)

必须在活动的任何创建者中设置点击侦听器(onCreate,onResume,onPause,...)。请注意,您要将侦听器设置为(侦听)更改。 您仍然可以使用onTouch重写方法。它有助于获得用户在屏幕中点击的绝对坐标,但它完全独立于地图。 (顺便说一句,你需要什么absoluta坐标?)。

试试:

@Override
public boolean onTouchEvent(MotionEvent event) 
{
    Toast.makeText(
            MapaLugaresActivity.this,
            "Click\n" +
            "X: " + event.getX() + " - Y: " + event.getY(),
            Toast.LENGTH_SHORT).show();

    return super.onTouchEvent(event);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Inflate view
    // Inflate map view

    mMap.setOnMapClickListener(new OnMapClickListener() {
        public void onMapClick(LatLng point) {
            Projection proj=mMap.getProjection();
            Point coord = proj.toScreenLocation(point);

            Toast.makeText(
            MapaLugaresActivity.this,
            "Click\n" +
            "Lat: " + point.latitude + "\n" +
            "Lng: " + point.longitude + "\n",
            Toast.LENGTH_SHORT).show();
        }
    });
}