Android 重繪 View
阿新 • • 發佈:2019-01-03
此刻打盹,你將做夢;而此刻學習,你將圓夢。
今天我們來學習如何重繪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的黃色大圓: