直播網站原始碼,CardView如何顯示出底背景樣式?

zhibo系統開發發表於2023-11-09

直播網站原始碼,CardView如何顯示出底背景樣式?

初始化View進入構造方法,會進行IMPL.initialize方法的呼叫。這個IMPL是什麼?

private static final CardViewImpl IMPL;
static {
    if (Build.VERSION.SDK_INT >= 21) {
        IMPL = new CardViewApi21Impl();
    } else if (Build.VERSION.SDK_INT >= 17) {
        IMPL = new CardViewApi17Impl();
    } else {
        IMPL = new CardViewBaseImpl();
    }
    IMPL.initStatic();
}



IMPL是CardView的實現類,不同的版本有不同的實現。此處進入CardViewApi21Impl裡面看看initialize實現。

@Override
public void initialize(CardViewDelegate cardView, Context context,
            ColorStateList backgroundColor, float radius, float elevation, float maxElevation) {
    final RoundRectDrawable background = new RoundRectDrawable(backgroundColor, radius);
    cardView.setCardBackground(background);
    View view = cardView.getCardView();
    view.setClipToOutline(true);
    view.setElevation(elevation);
    setMaxElevation(cardView, maxElevation);
}



可以發現在這裡面進行了cardView.setCardBackground呼叫,而background是根據設定的

backgroundColor = a.getColorStateList(R.styleable.CardView_cardBackgroundColor);


賦值RoundRectDrawable生成而來。

cardView.setCardBackground(background);中的CardView是CardViewDelegate,它是一個介面,所以也要看它的實現類。在CardView類中可以找到:

private final CardViewDelegate mCardViewDelegate = new CardViewDelegate() {
    private Drawable mCardBackground;
    @Override
    public void setCardBackground(Drawable drawable) {
        mCardBackground = drawable;
        setBackgroundDrawable(drawable);
    }
    //...
}



而上面的setBackgroundDrawable則是進入到了View層面了。

以上就是直播網站原始碼,CardView如何顯示出底背景樣式?, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2993680/,如需轉載,請註明出處,否則將追究法律責任。

相關文章