ANDROID: Как сделать пользовательский вид (макет) для маркера на Google Maps - PullRequest
2 голосов
/ 19 октября 2011

Как сделать нестандартный вид для маркера или как сделать нестандартный макет. вот так ... enter image description here и посмотрите на скриншот:

enter image description here

Ответы [ 3 ]

4 голосов
/ 09 июля 2012

Возможно, я немного опоздал, но я опубликую решение для тех, кто сталкивался / сталкивается с подобной проблемой. Таким образом, в основном то, что вы должны сделать (по крайней мере, для решения, которое вы ищете, то есть пользовательское изображение, наложенное на фон в виде рамки), - это наложить customImage на фоновое поле с помощью холста. Используя эту реализацию, вы можете эффективно создать BitmapDrawable из холста, который затем можно назначить в качестве маркера для вашего «Overlay» / «ItemizedOverlay». Также, пожалуйста, воздержитесь от создания ImageView для каждого наложения, так как это полностью разрушит вашу память / ваше приложение, если вам придется иметь дело с тысячами таких ImageViews одновременно. Вместо этого используйте BitmapDrawables, которые можно назначать наложениям во время их создания и не использовать почти столько же памяти, сколько ImageView.

public BitmapDrawable imageOnDrawable(int drawableBackground, Bitmap customImage)
{
//The following line is optional but I'd advise you to minimize the size of 
//the size of the bitmap (using a thumbnail) in order to improve draw
//performance of the overlays (especially if you are creating a lot of overlays).

Bitmap customImageThumbnail = ThumbnailUtils.extractThumbnail(
                                                customImage, 100, 100); 

Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
bm = Bitmap.createScaledBitmap(bm, 112, 120, false);

Canvas canvas = new Canvas(bm);
canvas.drawBitmap(bm, 0, 0, null);
// The 6,6 in the below line refer to the offset of the customImage/Thumbnail
// from the top-left corner of the background box (or whatever you want to use
// as your background) 
canvas.drawBitmap(customImageThumbnail, 6, 6, null); 

return new BitmapDrawable(bm);

}
4 голосов
/ 10 июля 2014

пользовательский маркер для Карт Google с использованием макета

View markerView = ((LayoutInflater) getActivity()
                        .getSystemService(
                                getActivity().LAYOUT_INFLATER_SERVICE))
                        .inflate(R.layout.map_marker, null);

установить маркер

 marker = map.addMarker(new MarkerOptions()
                                        .position(latLng)
                                        .title(strName)
                                        .snippet(strStatus)
                                        .icon(BitmapDescriptorFactory
                                                .fromBitmap(createDrawableFromView(
                                                        getActivity(),
                                                        markerView))));

Создать растровое изображение из Drawable

public static Bitmap createDrawableFromView(Context context, View view) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    ((Activity) context).getWindowManager().getDefaultDisplay()
            .getMetrics(displayMetrics);
    view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            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;
}
3 голосов
/ 19 октября 2011

Я пока не кодирую android, так что это в значительной степени основано на последнем блоке кода здесь: http://code.google.com/apis/maps/articles/android_v3.html

Там, где он заканчивается просто реализацией обычной карты, вы должны сделать следующееЧтобы добавить маркер на существующую карту:

var myIcon=new google.maps.MarkerImage('my_icon.png');
var point=new google.maps.LatLng(someLatitude,someLongitude);
var marker = new google.maps.Marker({position: point,map: map, icon:mc});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...