1. 程式人生 > >android關於canvas.rotate()研究

android關於canvas.rotate()研究

在上篇文章中寫了一個支付寶芝麻信用的頁面的自定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的方法是進行畫布的旋轉操作,我們可以自己想象成座標系的旋轉,這兩種是不衝突的。