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