关于在 Android 自定义地图比例尺控件的背景与过程
背景
比例尺是标识图上一条线段的长度与地面上相应线段的实际长度之比。
因此地图上的比例尺包含两个要素,线段与值。
这里我们需要自己绘制出一个比例尺控件。
比例尺表示选择
目前比例尺有两种表达方案:
- 固定线段长度,改变值
- 固定值,改变线段长度
参考目前流行的百度地图、高德地图,采用第二种方案。即在地图缩放的过程中,实施改变比例尺的长度。
步骤
1. 创建一个比例尺控件「MyScaleView.java」
2. 继承 View ,重写其构造方法,定义变量
|
|
其中 :
- mScaleWidth 是比例尺的宽度
- mScaleHight 是比例尺的高度
- mScaleText 是比例尺显示的文字
- mTextColor 是比例尺显示文字的颜色
- mScaleSpaceText 是比例尺文字与图例的空隙
- mTextSize 是比例尺文字的大小
3. 编写初始化参数的方法 initScale()
,在构造方法中调用
|
|
其中
R.dimen.txt_map_scale_size
是「dimens.xml」中设置的比例尺文字大小,目的是适配不用尺寸的设备。
4. 编写 获取宽度,获取高度的方法,getWidthSize()
,getHightSize()
|
|
5. 重写 onMearsure()
方法
|
|
使用
setMeasuredDimension
将宽高返回给父View
6. 重写 onDraw() 方法
|
|
- 需要说明的是,
canvas.drawText()
设置文字的左下角为绘制的起点,如图所示
7. 编写比例尺刷新方法 refreshScaleView()
|
|
refreshScaleView()
为被调用的刷新比例尺数据的方法setScaleText()
设置比例尺文字,这个不用说明setScaleWidth()
这是比例尺的宽度,里面用到getPPIofDevice()
这方法来获取设备的PPI数据,用于显示实际宽度
题图:来源于 Google
本站点采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。