我想获取被触摸的位置坐标并将其传递给另一个活动。谷歌地图显示在我的活动中,但其触摸事件无效。我想得到触摸位置的坐标,并开始将这些坐标传递给另一个活动的另一个活动。它是我的代码:
public class MapActivity extends Activity {
protected LocationManager locationManager;
String stlatitude = null, stlongitude = null;
private GoogleMap googleMap;
String locationName = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bundle b = getIntent().getExtras();
stlatitude = b.getString("latitude");
stlongitude = b.getString("longitude");
locationName = b.getString("location_name");
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try {
initilizeMap();
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMyLocationEnabled(true);
MarkerOptions marker = new MarkerOptions().position(
new LatLng(Float.parseFloat(stlatitude), Float
.parseFloat(stlongitude))).title(locationName);
googleMap.addMarker(marker);
if (stlatitude != null || stlongitude != null) {
LatLng myLatLng = new LatLng(Float.parseFloat(stlatitude),
Float.parseFloat(stlongitude));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
myLatLng, 12.0f));
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onResume() {
super.onResume();
initilizeMap();
}
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
//---when user lifts his finger---
if (event.getAction() == 1) {
GeoPoint p = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Toast.makeText(getBaseContext(),
p.getLatitudeE6() / 1E6 + "," +
p.getLongitudeE6() /1E6 ,
Toast.LENGTH_SHORT).show();
}
return false;
}
}
答案 0 :(得分:7)
Google Maps提供了一个采用LatLng的OnMapClickListener。 首先,将onMapClickListener设置为您的地图,然后在侦听器中执行您的操作。 从头顶看,这应该看起来像
googleMap.setOnMapClickListener(new OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
Log.d("DEBUG","Map clicked [" + point.latitude + " / " + point.longitude + "]");
//Do your stuff with LatLng here
//Then pass LatLng to other activity
}
});
确认后,将它放在initilizeMap()中,您的googleMap不会为空。
我目前无法测试代码,但我很确定它看起来应该是这样的。否则,关于OnMapClickListener和LatLng的Google文档应该有所帮助。
希望这有助于你,让我知道!
答案 1 :(得分:0)
将OnMapClickListener添加到您的活动中并获取onMapClick
中的坐标答案 2 :(得分:0)
您不需要实现任何Click侦听器。 GoogleMaps API带有一个内置的侦听器,该侦听器提供了Map Click上的坐标(LatLng)。
活动代码
public class MapActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleMap.OnMapClickListener{
private GoogleMap Map;
private SupportMapFragment mapFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
/*
* Its the callback method for OnMapReadyCallback interface
* attach listener when the map is ready
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setOnMapClickListener(this);
}
// Its the callback method for GoogleMap.OnMapClickListener interface
@Override
public void onMapClick(LatLng latLng) {
Log.d("Map", latlng.toString());
}
}
布局代码:activity_map.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".activities.MapActivity">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.AddressActivity"
/>
</RelativeLayout>
最重要的一点是在地图准备好后附加MapClickListener。
为此,我们将mMap.setOnMapClickListener(this);
放入onMapReady(GoogleMap googleMap)
方法中,否则将获得空指针异常