目标

实现一个室内地图,地图使用图片,svg格式,能够实现Marker,Polyline,放大,缩小等功能.

实现方法

其中的难点主要是,图像经过放大缩小后Marker\Polyline等坐标的对应关系.

private fun drawMaker(maker: Marker, canvas: Canvas?) {
    val icon = maker.icon
    pointIn[0] = maker.x
    pointIn[1] = maker.y
    iconMatrix.reset()
    imageView?.imageMatrix?.mapPoints(pointOut, pointIn) //得到图片变换后相应的坐标
    iconMatrix.postTranslate(pointOut[0], pointOut[1])
    iconRect.set(0, 0, icon.intrinsicWidth, icon.intrinsicHeight);
    Gravity.apply(Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, 0, 0, iconRect, posRect); //图标对应maker点的位置
    iconMatrix.postTranslate((-posRect.left).toFloat(), (-posRect.top).toFloat())
    canvas?.save();
    canvas?.concat(iconMatrix)
    var width = icon.intrinsicWidth;
    var height = icon.intrinsicHeight;
    icon.setBounds(0, 0, width, height)
    icon.draw(canvas!!)
    canvas.restore();
}

地址

https://github.com/xfans/imagemap

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注