去年蘇州街一家公司面試,當時他們正在做一個關于國內省份的APP,因此被問到了一個問題
怎么將各省的輪廓繪制到APP上,而且可以控制不同的狀態(tài)灰伟?
我接到問題后不假思索得就說用Path
,然后繪制到自定義的View上,多狀態(tài)的話控制不同的Paint
進行繪制就好了栏账。
然后我們就這個問題討論了20分鐘帖族,最后考官把他們的方案告訴了我,用DreamRiver 畫熱區(qū)放到WebView上來顯示挡爵。
其實在WebView上顯示的話SVG其實是最合適的竖般,可以矢量放大,還能控制各種顏色茶鹃,不過不知道兼容性如何涣雕。
時間過去快一年了,這兩天想起了這件事闭翩,因此將當時的思路用代碼實現(xiàn)了一下
地圖演示
其實畫這個比較麻煩的就是找地圖的數(shù)據(jù)挣郭,還好中國地廣物博,歷史悠久疗韵,我找到了一個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,歡迎吐槽