Карта Google с числовыми маркерами с сервера - PullRequest
0 голосов
/ 09 мая 2018

Я хочу показать несколько маркеров на карте Google. Я хочу показать маркер как число в круглой области. Как ниже изображение:

enter image description here

Для добавления нескольких маркеров я прошел:

Добавление нескольких маркеров в Google Maps API v2 для Android

Добавление нескольких маркеров Google Maps

Как отобразить несколько маркеров на MapFragment в Google Map API v2?

И я получил несколько маркеров по этому коду:

public class ComplaintsMapActivity extends FragmentActivity implements OnMapReadyCallback  {

    private GoogleMap mMap;
    private NetworkManager networkManager = null;
    private int reqIdComplaintList = -1;
    private ArrayList<ComplaintData> complaintList = new ArrayList<>();

    private static final int ZOOM_LEVEL = 15;
    private static final int TILT_LEVEL = 0;
    private static final int BEARING_LEVEL = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_complaints_map);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        networkManager = NetworkManager.getInstance();

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        complaintList = (ArrayList<ComplaintData>)getIntent().getSerializableExtra("list");


        for (int i = 0; i < complaintList.size(); i++) {
            ComplaintData location = complaintList.get(i);
            LatLng position = new LatLng(Double.parseDouble(location.getLat()), Double.parseDouble(location.getLng()));
            mMap.addMarker(new MarkerOptions().position(position));

            if (i == 0) {
                CameraPosition camPos = new CameraPosition(position, ZOOM_LEVEL, TILT_LEVEL, BEARING_LEVEL);
                mMap.moveCamera(CameraUpdateFactory.newCameraPosition(camPos));
            }
        }

    }

}

И мой результат:

enter image description here

Я знаю, как установить пользовательские маркеры. Но эти данные являются динамическими, любое количество данных будет там. Поэтому я хочу спросить, есть ли способ сгенерировать эти числа любым циклом. потому что для установки маркера на каждое место мне понадобятся сотни маркеров, что не очень предпочтительно. Так есть ли вариант для этого?

Примечание: я не хочу кластеризацию. Я просто хочу показать 1 на одном маркере, 2 на втором маркере, ... и 100 на сотне маркера и т. Д.

Любая помощь будет оценена.

Спасибо:)

1 Ответ

0 голосов
/ 09 мая 2018

Сначала Вам нужно создать свой макет для своего маркера:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content">

<ImageView
   android:layout_width="@dimen/_35sdp"
   android:layout_height="@dimen/_45sdp"
   android:src="@drawable/ic_marker" />

<TextView
   android:id="@+id/num_txt"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_centerInParent="true"
   android:paddingBottom="@dimen/_10sdp"
   android:text="20"
   android:textColor="@color/white"
   android:textSize="@dimen/font_title"
   android:textStyle="bold" />

</RelativeLayout>

Ваше изображение может быть нарисовано.Вы можете взять изображение или фон для вашего текста.Обе работы

View marker = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);
   TextView numTxt = (TextView) marker.findViewById(R.id.num_txt);
Marker myMarker = googleMap.addMarker(new MarkerOptions().position(latLng).title(arrPostList.get(i).getRestaurant_name()).icon(BitmapDescriptorFactory.fromBitmap(Utils.createDrawableFromView(getActivity(), marker))));

Создание растрового изображения из метода Drawable:

// Convert a view to bitmap
 public static Bitmap createDrawableFromView(Context context, View view) {
   DisplayMetrics displayMetrics = new DisplayMetrics();
   ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
   view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
   view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
   view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
   view.buildDrawingCache();
   Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

   Canvas canvas = new Canvas(bitmap);
   view.draw(canvas);

   return bitmap;
}
...