アプリケーションに複数のマーカーがあり、それらのいくつかが同じ位置にあることがあります。これらのマーカーのいくつかを常に他のマーカーの前に表示したいと思います。どうすればよいですか?
前もって感謝します。
アプリケーションに複数のマーカーがあり、それらのいくつかが同じ位置にあることがあります。これらのマーカーのいくつかを常に他のマーカーの前に表示したいと思います。どうすればよいですか?
前もって感謝します。
marker.setZIndex(Float.MAX_VALUE)
何らかの方法でそれらを並べ替える必要があり、アダプターの最後のものが一番上になります。
これは間違ったアプローチだと思います。あるマーカーを別のマーカーの前に置いたとしても、ユーザーが後ろにあるマーカーをクリックする可能性は依然としてあります。
そうする代わりにMarker
、マップに新しいものを追加するMarker
ときに、新しく追加されたMarker
場所に既に があるかどうかを確認します。はいの場合は、新しいデータを現在のデータに追加しただけで、Marker
別のデータを追加しないでください。
そうすれば、同じマーカーが指定された両方の場所を表します。
アップデート:
このコードを見てください。現在クリックされているマーカーが現在の場所であるかどうかを確認します。このようにして、ルート案内アクティビティを起動する必要があるかどうかがわかります。同じテクニックを使用して、特定の場所に既にマーカーがあるかどうかを確認できます。
map.setInfoWindowAdapter(new InfoWindowAdapter() {
// Use default InfoWindow frame
@Override
public View getInfoWindow(Marker args) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker args) {
// Getting view from the layout file info_window_layout
View v = getLayoutInflater().inflate(R.layout.info_window_layout, null);
// Getting the position from the marker
clickMarkerLatLng = args.getPosition();
TextView title = (TextView) v.findViewById(R.id.tvTitle);
title.setText(args.getTitle());
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
public void onInfoWindowClick(Marker marker)
{
if (SGTasksListAppObj.getInstance().currentUserLocation!=null)
{
if (String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLatitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) &&
String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLongitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
{
Toast.makeText(getApplicationContext(), "This your current location, navigation is not needed.", Toast.LENGTH_SHORT).show();
}
else
{
FlurryAgent.onEvent("Start navigation window was clicked from daily map");
tasksRepository = SGTasksListAppObj.getInstance().tasksRepository.getTasksRepository();
for (Task tmptask : tasksRepository)
{
String tempTaskLat = String.valueOf(tmptask.getLatitude());
String tempTaskLng = String.valueOf(tmptask.getLongtitude());
Log.d(TAG, String.valueOf(tmptask.getLatitude())+","+String.valueOf(clickMarkerLatLng.latitude).substring(0, 8));
if (tempTaskLat.contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) && tempTaskLng.contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
{
task = tmptask;
break;
}
}
/*
findDirections(SGTasksListAppObj.getInstance().currentUserLocation.getLatitude(),
SGTasksListAppObj.getInstance().currentUserLocation.getLongitude(),
clickMarkerLatLng.latitude, clickMarkerLatLng.longitude, GMapV2Direction.MODE_DRIVING );
*/
Intent intent = new Intent(getApplicationContext() ,RoadDirectionsActivity.class);
intent.putExtra(TasksListActivity.KEY_ID, task.getId());
startActivity(intent);
}
}
else
{
Toast.makeText(getApplicationContext(), "Your current location could not be found,\nNavigation is not possible.", Toast.LENGTH_SHORT).show();
}
}
});
// Returning the view containing InfoWindow contents
return v;
}
});
常に表示したいものを選択し、最後にマップに追加します。