高級UI特效—用SVG碼造一個精美的中國地圖


前言

來繼續學習SVG,要想深入了解還是要多動手進行實戰。關於svg基礎可以去看一下我的上一篇文章《SVG前戲—讓你的View多姿多彩》,今天就用SVG打造一個精美的UI效果。

正文

先上效果圖:

開啟線程池,進行繪制
開啟線程池,進行繪制
 選擇省份
選擇省份

我們都知道SVG的文件是純粹的 XML。如:


 

[圖片上傳中...(12345.gif-60d52c-1533723732988-0)]

123.gif
123.gif

看到這里,我們都明白了。原來里面類似以path的數據進行組裝的。只需要進行解析xml就可以了。

解析關鍵代碼:


 

關鍵點:還是在於UI繪制的時候,把解析到的數據進行分片繪制。這里用是path和region互相結合的一個算法。另外剛開始解析數據的時候,我開起了線程池進行繪制刷新的。詳細可參考demo!

<path/>路徑的路徑描述指令含義表:
  • M = moveto 相當於 android Path 里的moveTo(),用於移動起始點
  • L = lineto 相當於 android Path 里的lineTo(),用於畫線
  • H = horizontal lineto 用於畫水平線
  • V = vertical lineto 用於畫豎直線
  • C = curveto 相當於cubicTo(),三次貝塞爾曲線
  • S = smooth curveto 同樣三次貝塞爾曲線,更平滑
  • Q = quadratic Belzier curve quadTo(),二次貝塞爾曲線
  • T = smooth quadratic Belzier curveto 同樣二次貝塞爾曲線,更平滑
  • A = elliptical Arc 相當於arcTo(),用於畫弧
  • Z = closepath 相當於closeTo(),關閉path

大寫代表絕對位置, 小寫代表相對位置。

SVG里面還有各種標簽:

包括line直線,circle圓,rect矩形,eliipse橢圓,polygon多邊形,等等
這些只要我們又一個SVG文件,都可以將其轉換成java代碼


 

 

地圖項目地址:

https://github.com/androidstarjack/MySvgYuyahaoDrawChinaMap

備注:該demo僅為學習Android提供思路用,我很愛國的!

 該demo僅為學習Android提供思路用,我很愛國的
該demo僅為學習Android提供思路用,我很愛國的

 

閱讀更多

終於,我還是下決心學Java后台了

談一下Application和Context

金9銀10的面試黃金季節,分享幾個重要的面試題

談一下Application和Context

總結

作為一個程序員,我們當然不能手動去做這個工作,那就涉及兩個問題,一個是SVG的解析,一個是解析后的繪制。雖然有人已經完成了這個工作,但我覺得還是自己動手敲一遍為好!任何時候不要太過於依賴第三方的。

相信自己,沒有做不到的,只有想不到的

歡迎關注我公眾號:終端研發部,在這里獲得的不僅僅是技術!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM