Android 上绘制中国省份地图

2016-08-04  本文已影响504人  程树欣

去年苏州街一家公司面试,当时他们正在做一个关于国内省份的APP,因此被问到了一个问题

怎么将各省的轮廓绘制到APP上,而且可以控制不同的状态?

我接到问题后不假思索得就说用Path,然后绘制到自定义的View上,多状态的话控制不同的Paint进行绘制就好了。

然后我们就这个问题讨论了20分钟,最后考官把他们的方案告诉了我,用DreamRiver 画热区放到WebView上来显示。

其实在WebView上显示的话SVG其实是最合适的,可以矢量放大,还能控制各种颜色,不过不知道兼容性如何。

时间过去快一年了,这两天想起了这件事,因此将当时的思路用代码实现了一下

地图演示

其实画这个比较麻烦的就是找地图的数据,还好中国地广物博,历史悠久,我找到了一个SVG的中国地图,接下来处理如下三步就行了

1.将SVG <path>转成Android中的Path(详见上篇文章)

2.将Path绘制到Canvas上,这个没有难度

3.处理触摸点击等事件,确定点击在封闭的Path内

只要是个封闭的Path,在Android上还是很好弄得,看下面这个例子

 int x = 150;
 int y = 120;
 
 Path path = new Path();
 path.moveTo(100,100);
 path.lineTo(300,100);
 path.lineTo(300,300);
 path.close();
 
 RectF r = new RectF();
 path.computeBounds(r, true);
 Region re = new Region();
 re.setPath(path, 
        new Region((int) r.left, (int) r.top, (int) r.right, (int) r.bottom));
 boolean isInPath = re.contains(x,y);

这个Demo 已分享到GitHub,欢迎吐槽

上一篇下一篇

猜你喜欢

热点阅读