android - android 谷歌地图 API v2: 如何使标记可以点击?

  显示原文与译文双语对照的内容

在 Android 谷歌地图 API v2中,如何让标记变成可以点击的,这样它们就可以打开带有选项的菜单,或者只启动一个新的? 我相信我现在在我的应用程序中做的标记是"新手新手"方法。 我没有给他们分配一个 NAME 或者方法,以便能够与它的他需要的代码链接它。


googleMap.addMarker(new MarkerOptions()


. position(latLng)


. title("My Spot")


. snippet("This is my spot!")


. icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));



如果你回答这里问题,请包含一个标记的示例代码,使用唯一的NAME,然后被设置为可以单击。

时间: 原作者:

Google Android地图 Api v2中的所有标记都是可以点击的。 你不需要将任何附加属性设置为 marker 。 要执行的操作- register marker 单击回调到googleMap并在回调内处理单击:


public class MarkerDemoActivity extends android.support.v4.app.FragmentActivity


 implements OnMarkerClickListener


{


 private Marker myMarker; 



 private void setUpMap()


 {


. . .....


 googleMap.setOnMarkerClickListener(this);



 myMarker = googleMap.addMarker(new MarkerOptions()


. position(latLng)


. title("My Spot")


. snippet("This is my spot!")


. icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));


. . ....


 }



 @Override


 public boolean onMarkerClick(final Marker marker) {



 if (marker.equals(myMarker)) 


 {


//handle click here


 }


 }


}



原作者:

setTag(position) 在添加标记时添加标记。


Marker marker = map.addMarker(new MarkerOptions()


. position(new LatLng(latitude, longitude)));


marker.setTag(position);



setOnMarkerClickListener 侦听器上的getTag()


map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {


 @Override


 public boolean onMarkerClick(Marker marker) {


 int position = (int)(marker.getTag());


//Using position get Value from arraylist 


 return false;


 }


 });



原作者:

另一种解决方案:按标题获取标记


public class MarkerDemoActivity extends android.support.v4.app.FragmentActivity


implements OnMarkerClickListener


{


 private Marker myMarker; 



 private void setUpMap()


 {


. . .....


 googleMap.setOnMarkerClickListener(this);



 myMarker = googleMap.addMarker(new MarkerOptions()


. position(latLng)


. title("My Spot")


. snippet("This is my spot!")


. icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));


. . ....


}



@Override


public boolean onMarkerClick(final Marker marker) {



 String name= marker.getTitle();



 if (name.equalsIgnoreCase("My Spot")) 


 {


//write your code here


 }


}



}

下面是我的地图 Activity的全部代码,带有 4个可以点击标记。 点击一个标记显示一个信息窗口,点击信息窗口之后,你将进入另一个 Activity: 英语,德语,西班牙语或者意大利语。 如果你想在OnInfoWindowClickListener中使用 OnMarkerClickListener,你只需交换此行:


mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener()



对此:


mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()



这一行:


public void onInfoWindowClick(Marker arg0)



对此:


public boolean onMarkerClick(Marker arg0)



在方法"onMarkerClick"的末尾:

 
return true;



 

我认为这对某人可能有帮助;


package pl.pollub.translator;



import android.content.Intent;


import android.os.Bundle;


import android.support.v4.app.FragmentActivity;


import android.widget.Toast;



import com.google.android.gms.maps.CameraUpdateFactory;


import com.google.android.gms.maps.GoogleMap;


import com.google.android.gms.maps.OnMapReadyCallback;


import com.google.android.gms.maps.SupportMapFragment;


import com.google.android.gms.maps.model.LatLng;


import com.google.android.gms.maps.model.Marker;


import com.google.android.gms.maps.model.MarkerOptions;



public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {



 private GoogleMap mMap;



 @Override


 protected void onCreate(Bundle savedInstanceState) {


 super.onCreate(savedInstanceState);


 setContentView(R.layout.activity_maps);



 SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()


. findFragmentById(R.id.map);


 mapFragment.getMapAsync(this);


 Toast.makeText(this,"Choose a language.", Toast.LENGTH_LONG).show();


 }



 @Override


 public void onMapReady(GoogleMap googleMap) {


 mMap = googleMap;


 mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener()


 {



 @Override


 public void onInfoWindowClick(Marker arg0) {


 if(arg0!= null && arg0.getTitle().equals("English")){


 Intent intent1 = new Intent(MapsActivity.this, English.class);


 startActivity(intent1);}



 if(arg0!= null && arg0.getTitle().equals("German")){


 Intent intent2 = new Intent(MapsActivity.this, German.class);


 startActivity(intent2);} 



 if(arg0!= null && arg0.getTitle().equals("Italian")){


 Intent intent3 = new Intent(MapsActivity.this, Italian.class);


 startActivity(intent3);}



 if(arg0!= null && arg0.getTitle().equals("Spanish")){


 Intent intent4 = new Intent(MapsActivity.this, Spanish.class);


 startActivity(intent4);}


 }


 });


 LatLng greatBritain = new LatLng(51.30, -0.07);


 LatLng germany = new LatLng(52.3107, 13.2430);


 LatLng italy = new LatLng(41.53, 12.29);


 LatLng spain = new LatLng(40.25, -3.41);


 mMap.addMarker(new MarkerOptions()


. position(greatBritain)


. title("English")


. snippet("Click on me:)"));


 mMap.addMarker(new MarkerOptions()


. position(germany)


. title("German")


. snippet("Click on me:)"));


 mMap.addMarker(new MarkerOptions()


. position(italy)


. title("Italian")


. snippet("Click on me:)"));


 mMap.addMarker(new MarkerOptions()


. position(spain)


. title("Spanish")


. snippet("Click on me:)"));


 mMap.moveCamera(CameraUpdateFactory.newLatLng(greatBritain));


 mMap.moveCamera(CameraUpdateFactory.newLatLng(germany));


 mMap.moveCamera(CameraUpdateFactory.newLatLng(italy));


 mMap.moveCamera(CameraUpdateFactory.newLatLng(spain));


 }


}



...