1. 程式人生 > >Android 重繪 View

Android 重繪 View

此刻打盹,你將做夢;而此刻學習,你將圓夢。


今天我們來學習如何重繪View!
所謂的重繪就是重新繪製他的外觀(樣式),既然要重新繪製,那麼首先需要繼承 View 類。

extends View

首先,新建一個android專案,我們定義一個類,並繼承 View,類名叫:DrawView:

public class DrawView extends View {

    public DrawView(Context context) {
        super(context);
    }
}

繼承View類以後,我們需要找到View裡面用來繪製的函式,仔細找你會找到一個 onDraw(Canvas canvas) 函式,沒錯這個函式就是用來繪製View外觀的函式!
接下來我們重寫 onDraw(Canvas canvas) 這個函式:

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

函式裡面有一個類:

Canvas

這個類就是用來繪製的,但是僅憑 Canvas 這一個類還不夠,我們還需要另一個類:

Paint

通常,我們把Canvas這個類比作 ‘畫紙’;把Paint這個類比作 ‘畫筆’
這兩個類一起合作,就可以繪製圖形了。
知道怎麼繪製以後,我們來進行實踐操作:

    @Override
    protected void onDraw(Canvas
canvas) { super.onDraw(canvas); Paint paint=new Paint(); paint.setAntiAlias(true);//設定抗鋸齒 paint.setColor(Color.YELLOW);//設定畫筆的顏色 paint.setStrokeWidth(10);//設定畫筆的粗細 paint.setStyle(Paint.Style.FILL);//設定樣式(FILL為填充內部顏色,STROKE為只描邊不填充) /** * 畫筆選擇(設定)好後,我們就可以在紙上(Canvase
)畫畫了 * 本次例項繪製一個 圓形*/ canvas.drawCircle(300,300,200,paint); /**.drawCircle()為繪製一個圓形 第一個引數為 x 座標,第二個引數為 y 座標,第三個為 半徑 的大小,,第四個就是把我們設定好的 paint */ }

這樣一個簡單的重繪View就完成了,接下來就是把他顯示出來,在activity_main.xml裡面新增一個FrameLayout佈局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>
</LinearLayout>

在Mainactivity.java 裡面應用我們剛才重繪的View:

    public class MainActivity extends AppCompatActivity {
    private FrameLayout frameLayout;//定義一個FrameLayout
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main);

        frameLayout = (FrameLayout) findViewById(R.id.framelayout);//初始化 framelayout
        frameLayout.addView(new DrawView(this));//在這裡,使用frameLayout的addView函式,把我們剛才重繪的View元件新增進去
    }

}

然後執行程式,如圖,我們就建立了一個直徑400dp,半徑200dp的黃色大圓:

這程式碼執行結果圖