zoukankan      html  css  js  c++  java
  • Android高德地图自定义Markers的例子

    下文为各位重点介绍关于Android高德地图自定义Markers的例子,希望这篇文章能够让各位理解到Android高德地图自定义Markers的方法。

    之前的博客里说了地图的嵌入和定位,今天就说说在地图上显示一些我们想要的。在地图中有自带的Markers(标记),但是它只显示一个椭圆的图标,一般是不符合我们的需求的,这样就要我们自己来自定义。首先标记有下面一些属性;

    1.position(Required) 在地图上标记位置的经纬度值。参数不能为空。

    2.title 当用户点击标记,在信息窗口上显示的字符串。

    3.snippet 附加文本,显示在标题下方。

    4.draggable 如果您允许用户可以自由移动标记,设置为“ true ”。默认情况下为“ false ”。

    5.visible 设置“ false ”,标记不可见。默认情况下为“ true ”。

    6.anchor图标摆放在地图上的基准点。默认情况下,锚点是从图片下沿的中间处。

    7.perspective设置 true,标记有近大远小效果。默认情况下为 false。

    8.可以通过Marker.setRotateAngle() 方法设置标记的旋转角度,从正北开始,逆时针计算。如设置旋转90度,Marker.setRotateAngle(90)

    9.通过setFlat() 方法设置标志是否贴地显示

    自定义图标通常由 BitmapDescriptor 设置。我们可以在类 BitmapDescriptorFactory 使用以下其中一种方法定义。

    1.fromAsset(String assetName) 在 assets 目录中使用图像创建自定义标记。

    2.fromBitmap (Bitmap image) 使用位图图像创建自定义标记。

    3.fromFile (String path) 指定路径的文件创建自定义图标。

    4.fromResource (int resourceId) 使用已经存在的资源创建自定义图标。先看一下要实现的效果:

    地图自带标记  实现效果

    实现思路是:自定义布局,获取数据填入相应位置,然后将view转成Bitmap,调用AMap.addMarker(markerOptions) 方法添加到地图上。

    1. 自定义布局并填充数据:

    for (int i = 0; i < positionEneityList.size(); i++) {
    
        if (positionEneityList.get(i).getType().equals("1")) {
    
           View view = View.inflate(getActivity(),R.layout.view_day, null);
    
           TextView tv_price = (TextView) view.findViewById(R.id.tv_price);
    
           TextView tv_price_status = (TextView) view.findViewById(R.id.tv_price_status);
    
           tv_price.setText(positionEneityList.get(i).getPrice());
    
           tv_price_status.setText("元/时");
    
           Bitmap bitmap = CommentActivity.convertViewToBitmap(view);
    
           drawMarkerOnMap(new LatLng(Double.parseDouble(positionEneityList.get(i).getLatitude())
    
    , Double.parseDouble(positionEneityList.get(i).getLongitude())), bitmap, positionEneityList.get(i).getId());
    
        }
    
     }

    2.转成Bitmap:

    //view 转bitmap
    
    public static Bitmap convertViewToBitmap(View view) {
    
        view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    
        view.buildDrawingCache();
    
        Bitmap bitmap = view.getDrawingCache();
    
        return bitmap;
    
    }

    3.添加到地图上:

    /**
    
     * 在地图上画marker
    
     *
    
     * @param point      marker坐标点位置(example:LatLng point = new LatLng(39.963175,
    
     *                   116.400244); )
    
     * @param markerIcon 图标
    
     * @return Marker对象
    
     */
    
    private Marker drawMarkerOnMap(LatLng point, Bitmap markerIcon, String id) {
    
        if (aMap != null && point != null) {
    
            Marker marker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 1)
    
                    .position(point)
    
                    .title(id)
    
                    .icon(BitmapDescriptorFactory.fromBitmap(markerIcon)));
    
     
    
            return marker;
    
        }
    
        return null;
    
     
    
    }

    这样就实现了上述效果。

  • 相关阅读:
    2016年3月至9月随笔
    带大三个hybird app项目的设计管理笔记
    小议新人的培养
    GitHub上整理的一些工具,求补充——转的,先mark了
    AutoMapper(一)——实现数据契约和实体类之间的转换
    GitHub上整理的一些工具
    我最常用的7个Web在线工具
    在线团队协作工具+在线UML工具
    轻量级SaaS在线作图工具(继之前介绍后完整介绍)
    分享自己使用的在线UML画图工具
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5564928.html
Copyright © 2011-2022 走看看