11

地図上にマーカーを追加したい場合は、長いクリックをします。それは動作していません。通常のクリックが機能しています。 Toast in onMapClick()は通常のタップで表示されます。長いクリックは機能しません。長いクリックでToastonMapLongClick()は表示されません。地図上にマーカーも表示されません。GoogleマップAndroid API v2で地図上の長いクリックを検出して、マーカーが動作しないようにします

私はSupportMapFragmentを使用しています。私はアンドロイド2.xデバイスで自分のアプリケーションを使いたいからです。私はアンドロイドバージョン2.3.7を持っているネクサス1で私のアプリをテストしました。

これは私のコードです。

public class MainActivity extends FragmentActivity implements 
     OnMapClickListener, OnMapLongClickListener { 

    final int RQS_GooglePlayServices = 1; 
    private GoogleMap myMap; 

    Location myLocation; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FragmentManager myFragmentManager = getSupportFragmentManager(); 
     SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager 
       .findFragmentById(R.id.map); 
     myMap = mySupportMapFragment.getMap(); 

     myMap.setMyLocationEnabled(true); 

     myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     // myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     // myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
     // myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 

     myMap.setOnMapClickListener(this); 
     myMap.setOnMapLongClickListener(this); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     int resultCode = GooglePlayServicesUtil 
       .isGooglePlayServicesAvailable(getApplicationContext()); 

     if (resultCode == ConnectionResult.SUCCESS) { 
      Toast.makeText(getApplicationContext(), 
        "isGooglePlayServicesAvailable SUCCESS", Toast.LENGTH_LONG) 
        .show(); 
     } else { 
      GooglePlayServicesUtil.getErrorDialog(resultCode, this, 
        RQS_GooglePlayServices); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onMapClick(LatLng point) { 

     myMap.animateCamera(CameraUpdateFactory.newLatLng(point)); 

     Toast.makeText(getApplicationContext(), point.toString(), 
       Toast.LENGTH_LONG).show(); 


    } 

    @Override 
    public void onMapLongClick(LatLng point) { 

     myMap.addMarker(new MarkerOptions().position(point).title(
       point.toString())); 

     Toast.makeText(getApplicationContext(), 
       "New marker [email protected]" + point.toString(), Toast.LENGTH_LONG) 
       .show(); 

    } 

} 

どうすればこの問題を解決できますか?

答えて

36

これを使用しました。出来た。

GoogleMap gm; 

gm.setOnMapLongClickListener(this); 

@Override  
public void onMapLongClick(LatLng point) { 
    gm.addMarker(new MarkerOptions() 
     .position(point) 
     .title("You are here")   
     .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
} 
1

アイコンが設定されていません。 試してみてください。

@Override 
    public void onMapLongClick(LatLng point) { 

     myMap.addMarker(new MarkerOptions() 
      .position(point) 
      .title(point.toString()) 
      .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

     Toast.makeText(getApplicationContext(), 
      "New marker [email protected]" + point.toString(), Toast.LENGTH_LONG) 
      .show(); 

} 
1
googleMap = supportMapFragment.getMap(); 

    // Setting a click event handler for the map 
    googleMap.setOnMapClickListener(new OnMapClickListener() { 

     @Override 
     public void onMapClick(LatLng latLng) { 

      // Creating a marker 
      MarkerOptions markerOptions = new MarkerOptions(); 

      // Setting the position for the marker 
      markerOptions.position(latLng); 

      // Setting the title for the marker. 
      // This will be displayed on taping the marker 
      markerOptions.title(latLng.latitude + " : " + latLng.longitude); 

      // Clears the previously touched position 
      googleMap.clear(); 

      // Animating to the touched position 
      googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 

      // Placing a marker on the touched position 
      googleMap.addMarker(markerOptions); 
     } 
    }); 

OR

mMap.setOnMapLongClickListener(new 
      GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick (LatLng latLng){ 
      Geocoder geocoder = 
       new Geocoder(MapMarkerActivity.this); 
      List<Address> list; 
      try { 
       list = geocoder.getFromLocation(latLng.latitude, 
       latLng.longitude, 1); 
      } catch (IOException e) { 
       return; 
      } 
      Address address = list.get(0); 
      if (marker != null) { 
       marker.remove(); 
      } 

      MarkerOptions options = new MarkerOptions() 
       .title(address.getLocality()) 
       .position(new LatLng(latLng.latitude, 
       latLng.longitude)); 

      marker = mMap.addMarker(options); 
     } 
    }); 
関連する問題