前言
在Android實際項目開發中,由於需求,我們可能會自定義各種控件,最常用的就是extends View或extends LinearLayout等。然後再複寫onDraw()方法。
正文
1,最開始自定義XXView enxtends View ,然後重寫onDraw()方法,
這樣只要我們實例化一個XXView對象時,onDraw()方法就會調用。
但當我自定義另外一個View extends LinearLayout時,發現onDraw()方法沒有調用。到底是哪裏出現了問題呢?
先讓我們看一下LinearLayout中onDraw()源碼:
@Override
protected void onDraw(Canvas canvas) {
if (mDivider == null) {
return;
}
if (mOrientation == VERTICAL) {
drawDividersVertical(canvas);
} else {
drawDividersHorizontal(canvas);
}
}
大家應該一眼就看到了mDivider如果爲null時,它就直接return了,
而源碼中mDiviver爲Drawable對象。
private Drawable mDivider;
因此,我們在自定義繼承LinearLayout的控件時,得首先調用setDiviler(Drawable drawable)方法,然後再調用 setOrientation()方法。
setOrientation(VERTICAL);
setDividerDrawable(mResources.getDrawable(R.drawable.diliver_drawable));
只要如上設置後,onDraw()方法就會調用了。