Android關於LinearLayout中onDraw(Canvas canvas)方法不執行問題

前言

在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()方法就會調用了。

發佈了73 篇原創文章 · 獲贊 26 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章