目录

覆盖物

地图覆盖物是固定在地图上的图片。

添加覆盖物

  1. 通过BitmapDescriptorFactory来创建BitmapDescriptor对象,创建方式包括:
    示例代码如下:
    “Java”
    Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open("images/avocado.jpg"));
    String fileName = "maomao.jpg";
    String path = "/data/data/com.huawei.hms.maps.demo/avocado.jpg";
    BitmapDescriptor descriptorFromAsset = BitmapDescriptorFactory.fromAsset("images/avocado.jpg");
    BitmapDescriptor descriptorFromBitmap = BitmapDescriptorFactory.fromBitmap(bitmap);
    BitmapDescriptor descriptorFromFile = BitmapDescriptorFactory.fromFile(fileName);
    BitmapDescriptor descriptorFromPath = BitmapDescriptorFactory.fromPath(path);
    BitmapDescriptor descriptorFromResource = BitmapDescriptorFactory.fromResource(R.drawable.makalong);
    “Kotlin”
    val bitmap = BitmapFactory.decodeStream(assets.open("images/avocado.jpg"))
    val fileName = "maomao.jpg"
    val path = "/data/data/com.huawei.hms.maps.demo/avocado.jpg"
    val descriptorFromAsset = BitmapDescriptorFactory.fromAsset("images/avocado.jpg")
    val descriptorFromBitmap = BitmapDescriptorFactory.fromBitmap(bitmap)
    val descriptorFromFile = BitmapDescriptorFactory.fromFile(fileName)
    val descriptorFromPath = BitmapDescriptorFactory.fromPath(path)
    val descriptorFromResource = BitmapDescriptorFactory.fromResource(R.drawable.makalong)
  2. 创建一个GroundOverlayOptions对象来确定图像和位置:
    示例代码如下:
    “Java”
    String path = "/data/data/com.huawei.hms.maps.demo/avocado.jpg";
    BitmapDescriptor descriptor = BitmapDescriptorFactory.fromPath(path);
    GroundOverlayOptions options =
        new GroundOverlayOptions().position(new LatLng(48.893478, 2.334595), 60, 30).image(descriptor);
    “Kotlin”
    var path = "/data/data/com.huawei.hms.maps.demo/avocado.jpg";
    var descriptor = BitmapDescriptorFactory.fromPath(path);
    val options = GroundOverlayOptions().position(LatLng(48.893478, 2.334595), 60f, 30f).image(descriptor)
  3. 通过HuaweiMap对象的addGroundOverlay(GroundOverlayOptions)方法添加地图覆盖物,如图1所示,该方法将返回该GroundOverlay对象。
    示例代码如下:
    “Java”
    private GroundOverlay mGroundOverlay;
    
    // 在地图上增加覆盖物
    mGroundOverlay = hMap.addGroundOverlay(options);
    “Kotlin”
    private var mGroundOverlay: GroundOverlay? = null
    
    // 在地图上增加覆盖物
    mGroundOverlay = hMap.addGroundOverlay(options)
    图1 覆盖物
  4. 修改和移除。
    示例代码如下:
    “Java”
    if (null != mGroundOverlay) {
        // 设置覆盖物
        mGroundOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.makalong));
    }
    
    if (null != mGroundOverlay) {
        // 移除覆盖物
        mGroundOverlay.remove();
    }
    “Kotlin”
    if (null != mGroundOverlay) {
        // 设置覆盖物
        mGroundOverlay?.setImage(BitmapDescriptorFactory.fromResource(R.drawable.makalong))
    }
    
    if (null != mGroundOverlay) {
        // 移除覆盖物
        mGroundOverlay?.remove()
    }
  5. 设置覆盖物位置。

    position(LatLng location, float width)和position(LatLng location, float width, float height)不可与positionFromBounds(LatLngBounds bounds)同时使用,否则会抛出IllegalStateException异常。

    • public GroundOverlayOptions position(LatLng location, float width)

      此方法会根据经纬度位置和图片宽度width参数(单位:米)设置覆盖物。在显示时,图片的高度根据图片的宽高比例和width参数自动计算匹配。

    • public GroundOverlayOptions position(LatLng location, float width, float height)

      此方法会根据经纬度位置、图片宽度width参数和图片高度height参数(单位:米)设置覆盖物。在显示时,图片会被缩放来适应指定的尺寸,图片可能会变形。

    • public GroundOverlayOptions positionFromBounds(LatLngBounds bounds)

      此方法会指定一个LatLngBounds对象,该对象由两个LatLng对象形成一个矩形区域,分别为西南角southwest和东北角northeast,此方法会根据该矩形区域设置覆盖物的位置。

覆盖物事件

覆盖物点击事件

可以使用HuaweiMap.OnGroundOverlayClickListener来侦听覆盖物上的点击事件。要在地图上设置此侦听器,请调用HuaweiMap对象的setOnGroundOverlayClickListener(HuaweiMap.OnGroundOverlayClickListener)方法。当用户点击覆盖物时,onGroundOverlayClick(GroundOverlay)将回调该覆盖物。

示例代码如下:
“Java”
hMap.setOnGroundOverlayClickListener(new HuaweiMap.OnGroundOverlayClickListener() {
    @Override
    public void onGroundOverlayClick(GroundOverlay groundOverlay) {
        Toast.makeText(getApplicationContext(), "GroundOverlay is clicked.", Toast.LENGTH_LONG).show();
    }
});
“Kotlin”
hMap.setOnGroundOverlayClickListener { Toast.makeText(applicationContext, "GroundOverlay is clicked.", Toast.LENGTH_LONG).show() }