自定義view總結

一個高級Android工程師除了要會使用Google原生的view,必須會根據實際項目的酷炫效果本身去寫一些自定義view來解決問題,自定義view已經寫了很多了,今天來給你們帶來一些自定義view總結css

自定義view速查表

Canvas經常使用操做速查表

操做分類 相關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比較難以理解和使用,故封裝了一些經常使用的方法。

Path經常使用操做速查表

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 矩陣變換

Matrix經常使用操做速查表

方法類別 相關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進階參考資料

繪製機制

先好好的理解一下繪製流程 公共技術點之 View 繪製流程git

GcsSloop---自定義View系列自定義

愛哥的---自定義View其實很簡單

劉某人程序員---Android繪圖機制

Carson_Ho

事件傳遞機制

仍是先來理解事件傳遞機制公共技術點之 View 事件傳遞程序員

屬性動畫

把動畫基礎瞭解好來,差很少就出師了公共技術點之 Android 動畫基礎github

自定義view簡短篇

教你步步爲營掌握自定義View
自定義View,有這一篇就夠了canvas

自定義view開源項目練習

  1. NumberProgressBar(代碼家)
    這個項目能夠熟練掌握如何控制view在界面中的位子數據結構

  2. SmallChart
    項目包括折線圖、曲線圖(可填充)、柱狀圖、扇形圖、雷達圖的繪製,讓你熟練使用draw()相關類。 框架

  3. CircleImageView
    一個圓形的ImageView ide

  4. PhotoView
    對ImageView支持各類手勢操做,縮放、移動、旋轉...熟練掌握手勢操做。

  5. AndroidSwipeLayout
    綜合

  6. MPAndroidChart
    MPAndroidChart是一款基於Android的開源圖表庫,MPAndroidChart不只能夠在android設備上繪製各類統計圖表,並且能夠對圖表進行拖動和縮放操做,應用起來很是靈活。MPAndroidChart一樣擁有經常使用的圖表類型:線型圖、餅圖、柱狀圖和散點圖。

  7. Side-Menu.Android
    分類側滑菜單,吊炸天的效果

  8. WilliamChart
    繪製圖表的庫,支持LineChartView、BarChartView和StackBarChartView三中圖表類型

  9. circular-progress-button
    帶進度顯示的Button,讓操做更炫酷

  10. Context-Menu.Android
    能夠方便快速集成漂亮帶有動畫效果的上下文菜單

  11. ToggleButton
    狀態切換的 Button,相似 iOS,用 View 實現

  12. InstaMaterial
    Instagram的一組Material 風格的概念設計

  13. sweet-alert-dialog
    一個帶動畫效果的自定義對話框樣式

  14. 刷新控件集合 適合好好coding一遍
    把這些coding好了,作一個本身專屬的刷新控件指日可待

    以上開源項目選擇不一樣類型的擼一個,有空擼個遍,之後以爲是自定義view的大神

建議

參考寫如今很火的開源項目的自定義view時,先看看他的效果,而後再本身動腦動手去寫,每個問題都有多種解決方案,開源出來的並不必定是最好的,用本身的思路去寫再和別人開源的作對比,取長補短,而後在自定義view這塊的造詣將會更深。

簡單來講:看效果--->動腦動手寫--->對比取長補短

我的博客

github

相關文章
相關標籤/搜索