android關於canvas.rotate()研究
阿新 • • 發佈:2019-02-05
在上篇文章中寫了一個支付寶芝麻信用的頁面的自定View,在其中使用了canvas.rotate()的方法,但是認識比較錯亂,網上有兩種說法,一是旋轉了畫布,二是旋轉了座標,今天就想研究一下,並且記錄下來:
先看一個簡單的demo把:
這是簡單寫了一個自定義View,程式碼如下:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RectF recf=new RectF(150,150,200,200);
canvas.drawOval(recf,paint);
canvas .save();
canvas.rotate(30);
paint.setColor(Color.parseColor("#ff33ee"));
canvas.drawOval(recf,paint);
canvas.restore();
}
我們現在自定義View中確定一個正方形區域,並確定了第一個圓圈的位置,它包含在正方形裡面,我們也可以很清楚的知道他的座標為(150,150),他的半徑為25,畫出來就是橙紅色圓圈的位置。
然後我們呼叫canvas.rotate()方法進行旋轉30度,還是一樣的座標,我們可以看到在橙紅色圓圈的左下方出現了一個紫色的圓圈,這是我們旋轉的一般步驟。
那這個方法到底是通過哪個旋轉(畫布本身,還是座標系)來進行實現的呢?一開始我們想到的就是進入原始碼中檢視,我們點進去看了一下:
public void rotate(float degrees) {
native_rotate(mNativeCanvasWrapper, degrees);
}
我們看到了一個native的方法,因為我們可以推斷出這個是通過呼叫底層的方法進行的,那麼通過檢視原始碼的方法行不通了。
那隻能去android官網中進行查看了:
阿西吧,還是沒有指出,最後只能看看別人怎麼說的了:
通過看看好多部落格,暫時先確定這種思想:
canvas.rotate的方法是進行畫布的旋轉操作,我們可以自己想象成座標系的旋轉,這兩種是不衝突的。