自定義View(四) Graphics2D 實現動態效果
阿新 • • 發佈:2019-02-13
自定義動畫的動態包括兩個方面
- 讓動畫動起來 (這類動畫可以通過週期行重畫實現)
- 實現和使用者的互動
在繪圖的整個過程中,經常會使用到雙快取技術,這是一項挺重要的技術,,為什麼這麼說呢?
- 能提高繪圖的效率
- 實現繪圖的過程和結果分離
⚠️ 理解和掌握雙快取技術事掌握Graphics2D技術的重要因素
上一篇部落格《自定義View(三)》中一直在ImageView上進行繪圖,當然這只是暫時性的,我們自定義View,肯定要在定義的繼承自View的類中(只是一種)。重寫onDraw() 方法,進行繪圖,
將要介紹的裡面的重要的方法–>invalidate()
方法 | 作用 |
---|---|
invalidate() | 重繪整個檢視區域 |
invalidate(int I ,int taint r, int b) | 表示重繪製定區域 |
invalidate(Rect rect) | 同上 |
invalidate()方法只能在UI執行緒中呼叫,要是在子執行緒中將使用另一組方法postInvalidate()
postInvalidate()
方法 | 作用 |
---|---|
postInvalidate() | 在子執行緒中重新整理元件 |
postInvalidate(int left ,int top, int right, int bottom) | 同上 |
座標轉換
座標一般畫布的座標原點就是左上角,左負右正,上負下證,但是通過Canvas提供的方法可以對座標進行轉換,轉換的主要方式有四種:
平移、旋轉、縮放、拉斜
平移 —> translate(float dx, float dy)
在當前原點的基礎上水平評議dx個距離,垂直平移dy個距離,正負符號決定方向 ,這時,座標移動後新的座標系將時整個參考座標
旋轉 —> rotate(float degrees)
將畫布的座標以當前原點為中心旋轉指定的角度,正負決定旋轉的方向
方法 | 作用 |
---|---|
rotate(float degrees, float px, float py) | 以(px,py)為原心,旋轉degrees角度,正負決定旋轉方向 |
縮放—> scale()
方法 | 作用 |
---|---|
scale(float sx, float sy) | sx,sy分別時x軸和y軸方向上的縮放比例,小於1,縮小,等於1,不變,大於1,放大,最主要的是畫布縮放之後畫布上的所有元件都會縮放 |
scale(float sx, float sy,float px,float py) | 以(px,py)為願心進行縮放畫布 |
拉斜 —>skew()
方法 | 作用 |
---|---|
skew(float sx, float sy) | sx,sy分別時x軸和y軸方向上拉斜的一定角度,sx為x方向傾斜角度的tan值,sy為y軸方向傾斜角度的tan值, |
座標轉換後,後面的圖形繪製功能跟隨新座標,轉換前已經繪製的圖形不會有任何的變化,為了能恢復座標變化之前的狀態,Canvas定義儲存現場和恢復現場
方法 | 作用 |
---|---|
save() | 儲存現場 |
restore() | 回覆現場到save()執行之前的狀態 |
今天先記錄到這裡 ,要去寫一個Demo了