直播网站源码,CardView如何显示出底背景样式?

发布时间 2023-11-09 14:12:25作者: 云豹科技-苏凌霄

直播网站源码,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如何显示出底背景样式?, 更多内容欢迎关注之后的文章