一個高級Android工程師除了要會使用Google原生的view,必須會根據實際項目的酷炫效果本身去寫一些自定義view來解決問題,自定義view已經寫了很多了,今天來給你們帶來一些自定義view總結css
操做分類 | 相關API | 備註 |
---|---|---|
繪製顏色 | drawColor, drawRGB, drawARGB | 使用單一顏色填充整個畫布 |
繪製基本形狀 | drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRect, drawOval, drawCircle, drawArc | 依次爲 點、線、矩形、圓角矩形、橢圓、圓、圓弧 |
繪製圖片 | drawBitmap, drawPicture | 繪製位圖和圖片) |
繪製文本 | drawText, drawPosText, drawTextOnPath | 依次爲 繪製文字、繪製文字時指定每一個文字位置、根據路徑繪製文字 |
繪製路徑 | drawPath | 繪製路徑,繪製貝塞爾曲線時也須要用到該函數 |
頂點操做 | drawVertices, drawBitmapMesh | 經過對頂點操做可使圖像形變,drawVertices直接對畫布做用、 drawBitmapMesh只對繪製的Bitmap做用 |
畫布剪裁 | clipPath, clipRect | 設置畫布的顯示區域 |
畫布快照 | save, restore, saveLayerXxx, restoreToCount, getSaveCount | 依次爲 保存當前狀態、 回滾到上一次保存的狀態、 保存圖層狀態、 會滾到指定狀態、 獲取保存次數 |
畫布變換 | translate, scale, rotate, skew | 依次爲 位移、縮放、 旋轉、錯切 |
Matrix(矩陣) | getMatrix, setMatrix, concat | 實際畫布的位移,縮放等操做的都是圖像矩陣Matrix,只不過Matrix比較難以理解和使用,故封裝了一些經常使用的方法。 |
操做類型 | 相關API | 備註 |
---|---|---|
基礎方法 | getDensity, getWidth, getHeight,getDrawFilter,isHardwareAccelerated(API 11),getMaximumBitmapWidth,getMaximumBitmapHeight,getDensity,quickReject,isOpaque,setBitmap,setDrawFilter | 使用單一顏色填充畫布 |
繪製顏色 | drawColor, drawRGB, drawARGB,drawPaint | 使用單一顏色填充畫布 |
繪製基本形狀 | drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRect, drawOval, drawCircle, drawArc | 依次爲 點、線、矩形、圓角矩形、橢圓、圓、圓弧 |
繪製圖片 | drawBitmap, drawPicture | 繪製位圖和圖片 |
繪製文本 | drawText, drawPosText, drawTextOnPath | 依次爲 繪製文字、繪製文字時指定每一個文字位置、根據路徑繪製文字 |
繪製路徑 | drawPath | 繪製路徑,繪製貝塞爾曲線時也須要用到該函數 |
頂點操做 | drawVertices, drawBitmapMesh | 經過對頂點操做可使圖像形變,drawVertices直接對畫布做用、 drawBitmapMesh只對繪製的Bitmap做用 |
畫布剪裁 | clipPath, clipRect, clipRegion,getClipBounds | 畫布剪裁相關方法 |
畫布快照 | save, restore, saveLayer, saveLayerXxx, restoreToCount, getSaveCount | 依次爲 保存當前狀態、 回滾到上一次保存的狀態、 保存圖層狀態、 回滾到指定狀態、 獲取保存次數 |
畫布變換 | translate, scale, rotate, skew | 依次爲 位移、縮放、 旋轉、錯切 |
Matrix(矩陣) | getMatrix, setMatrix, concat | 實際畫布的位移,縮放等操做的都是圖像矩陣Matrix,只不過Matrix比較難以理解和使用,故封裝了一些經常使用的方法。 |
API21以上,很不爽,得吐槽html
做用 | 相關API | 備註 |
---|---|---|
移動起點 | moveTo | 移動下一次操做的起點位置 |
設置終點 | setLastPoint | 重置當前path中最後一個點位置,若是在繪製以前調用,效果和moveTo相同 |
鏈接直線 | lineTo | 添加上一個點到當前點之間的直線到Path |
閉合路徑 | close | 鏈接第一個點鏈接到最後一個點,造成一個閉合區域 |
添加內容 | addRect, addRoundRect, addOval, addCircle, addPath, addArc, arcTo | 添加(矩形, 圓角矩形, 橢圓, 圓, 路徑, 圓弧) 到當前Path (注意addArc和arcTo的區別) |
是否爲空 | isEmpty | 判斷Path是否爲空 |
是否爲矩形 | isRect | 判斷path是不是一個矩形 |
替換路徑 | set | 用新的路徑替換到當前路徑全部內容 |
偏移路徑 | offset | 對當前路徑以前的操做進行偏移(不會影響以後的操做) |
貝塞爾曲線 | quadTo, cubicTo | 分別爲二次和三次貝塞爾曲線的方法 |
rXxx方法 | rMoveTo, rLineTo, rQuadTo, rCubicTo | 不帶r的方法是基於原點的座標系(偏移量), rXxx方法是基於當前點座標系(偏移量) |
填充模式 | setFillType, getFillType, isInverseFillType, toggleInverseFillType | 設置,獲取,判斷和切換填充模式 |
提示方法 | incReserve | 提示Path還有多少個點等待加入(這個方法貌似會讓Path優化存儲結構) |
布爾操做(API19) | op | 對兩個Path進行布爾運算(即取交集、並集等操做) |
計算邊界 | computeBounds | 計算Path的邊界 |
重置路徑 | reset, rewind | 清除Path中的內容 reset不保留內部數據結構,但會保留FillType. rewind會保留內部的數據結構,但不保留FillType |
矩陣操做 | transform | 矩陣變換 |
方法類別 | 相關API | 備註 |
---|---|---|
基本方法 | equals hashCode toString toShortString | 比較、 獲取哈希值、 轉換爲字符串 |
數值操做 | set reset setValues getValues | 設置、 重置、 設置數值、 獲取數值 |
數值計算 | mapPoints mapRadius mapRect mapVectors | 計算變換後的數值 |
設置(set) | setConcat setRotate setScale setSkew setTranslate | 設置變換 |
前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘變換 |
後乘(post) | postConcat postRotate postScale postSkew postTranslate | 後乘變換 |
特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操做 |
矩陣相關 | invert isAffine(API21) isIdentity | 求逆矩陣、 是否爲仿射矩陣、 是否爲單位矩陣 ... |
表格中演示動畫均來自維基百科android
貝塞爾曲線 | 對應的方法 | 演示動畫 |
---|---|---|
一階曲線 (線性曲線) |
lineTo |
![]() |
二階曲線 | quadTo |
![]() |
三階曲線 | cubicTo |
![]() |
四階曲線 | 無 |
![]() |
先好好的理解一下繪製流程 公共技術點之 View 繪製流程git
仍是先來理解事件傳遞機制公共技術點之 View 事件傳遞程序員
把動畫基礎瞭解好來,差很少就出師了公共技術點之 Android 動畫基礎github
教你步步爲營掌握自定義View
自定義View,有這一篇就夠了canvas
NumberProgressBar(代碼家)
這個項目能夠熟練掌握如何控制view在界面中的位子數據結構
SmallChart
項目包括折線圖、曲線圖(可填充)、柱狀圖、扇形圖、雷達圖的繪製,讓你熟練使用draw()相關類。 框架
CircleImageView
一個圓形的ImageView ide
PhotoView
對ImageView支持各類手勢操做,縮放、移動、旋轉...熟練掌握手勢操做。
MPAndroidChart
MPAndroidChart是一款基於Android的開源圖表庫,MPAndroidChart不只能夠在android設備上繪製各類統計圖表,並且能夠對圖表進行拖動和縮放操做,應用起來很是靈活。MPAndroidChart一樣擁有經常使用的圖表類型:線型圖、餅圖、柱狀圖和散點圖。
Side-Menu.Android
分類側滑菜單,吊炸天的效果
WilliamChart
繪製圖表的庫,支持LineChartView、BarChartView和StackBarChartView三中圖表類型
circular-progress-button
帶進度顯示的Button,讓操做更炫酷
Context-Menu.Android
能夠方便快速集成漂亮帶有動畫效果的上下文菜單
ToggleButton
狀態切換的 Button,相似 iOS,用 View 實現
InstaMaterial
Instagram的一組Material 風格的概念設計
sweet-alert-dialog
一個帶動畫效果的自定義對話框樣式
刷新控件集合 適合好好coding一遍
把這些coding好了,作一個本身專屬的刷新控件指日可待
以上開源項目選擇不一樣類型的擼一個,有空擼個遍,之後以爲是自定義view的大神
參考寫如今很火的開源項目的自定義view時,先看看他的效果,而後再本身動腦動手去寫,每個問題都有多種解決方案,開源出來的並不必定是最好的,用本身的思路去寫再和別人開源的作對比,取長補短,而後在自定義view這塊的造詣將會更深。
簡單來講:看效果--->動腦動手寫--->對比取長補短