去年苏州街一家公司面试,当时他们正在做一个关于国内省份的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,欢迎吐槽
网友评论