自定义View实现图片地图,SVG室内地图
目标
实现一个室内地图,地图使用图片,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();
}