以前看到一位做者開源了一款手繪風格的圖表庫 Chart.xkcd,感受非常喜歡。
固然僅僅圖表是知足不了我滴,因而想看看 Android 上是否有相似的開源庫,一番搜索以後,顆粒無收。
想一想原理可能不是太難,因而花點時間動手寫了一個。java
成果以下:
android
想快速體驗一把,能夠下載 Demo APK ~git
SketchyComponent,一款手繪風格的 Android 組件庫。
倉庫地址:github.com/m-zylab/Ske…github
repositories {
jcenter()
}
複製代碼
implementation 'com.zylab:sketchy:0.1.3'
複製代碼
// 1. 建立 Sketchy 圖形
val skSquareDrawable = SkSquareDrawable().apply {
// 2. 設置屬性
fillColor = resources.getColor(android.R.color.holo_orange_dark)
}
// 3. 給 View 設置背景
text.background = skSquareDrawable
複製代碼
就是這麼 easy ~canvas
目前 SketchyComponent 提供了基礎圖形的 Drawable,一部分 Icon,以及用來自定義圖形的基礎功能。
下面分別介紹一下~bash
繪製一個矩形,效果以下:
app
繪製一個線形,效果以下:
spa
繪製一個圓形,效果以下:
3d
繪製一個扇形,效果以下:
code
繪製圖片,效果以下:
咱們提供了一些基礎圖形,方便用來自定義一些效果。下面是一些自定義的示例。
咱們提供的基礎圖形,均繼承自 SkShape
,其中提供了兩個方法,SkShape#parse
和 SkShape#draw(canvas: Canvas)
SkShape#parse 方法用來生成圖形對應的路徑
SkShape#draw 方法用來將圖形繪製到 canvas,若是在繪製時路徑尚未生成,即 parse 方法還未調用,默認會調用 parse 方法
以繪製直線爲例:
// 建立 SkLine
val line = SkLine()
// 設置屬性
line.startPoint = SkPoint(0.0, 0.0)
line.endPoint = SkPoint(100.0, 100.0)
// 進行繪製
line.draw(canvas)
複製代碼
具體的 SkShape 介紹以下:
繪製一個矩形
繪製一條線
繪製一個圓
繪製扇形
繪製一個圓形圖片
繪製一個矩形圖片
更多用法請參照 github.com/m-zylab/Ske… 以及 github.com/m-zylab/Ske…