1. 程式人生 > >自定義View(四) Graphics2D 實現動態效果

自定義View(四) Graphics2D 實現動態效果

自定義動畫的動態包括兩個方面

  1. 讓動畫動起來 (這類動畫可以通過週期行重畫實現)
  2. 實現和使用者的互動

在繪圖的整個過程中,經常會使用到雙快取技術,這是一項挺重要的技術,,為什麼這麼說呢?

  1. 能提高繪圖的效率
  2. 實現繪圖的過程和結果分離

⚠️ 理解和掌握雙快取技術事掌握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了