
本文共 4287 字,大约阅读时间需要 14 分钟。
CardView���Android������������������������������������������������������������������������UI������������������FrameLayout������������CardView������������������������������������������������������������Android���������������������������������������������������������������������������������������������������������������������������
���������������������
CardView������������������SDK���������������������������������������������������
���onMeasure������������CardView���������������������������������������������������������������������������API������������21������������������������������������������������������
CardViewApi21Impl���������������
������API21������������������CardViewApi21Impl���������������������������������������
public void initialize(CardViewDelegate cardView, Context context, ColorStateList backgroundColor, float radius, float elevation, float maxElevation) { RoundRectDrawable background = new RoundRectDrawable(backgroundColor, radius); cardView.setCardBackground(background); View view = cardView.getCardView(); view.setClipToOutline(true); // ��������������� view.setElevation(elevation); // ������������������ this.setMaxElevation(cardView, maxElevation); // ������������������������������}
���������������������CardViewDelegate������������CardView������������.Visual���������������setClipToOutline������CardView������������������������������������������setElevation������������������������
���������������������
���������������������������������������������������������������������
public void setMaxElevation(CardViewDelegate cardView, float maxElevation) { this.getCardBackground(cardView).setPadding(maxElevation, cardView.getUseCompatPadding(), cardView.getPreventCornerOverlap()); this.updatePadding(cardView);}
���������updatePadding���������������������������������������������
public void updatePadding(CardViewDelegate cardView) { if (!cardView.getUseCompatPadding()) { cardView.setShadowPadding(0, 0, 0, 0); // ������API21������������������������������������������0 } else { float elevation = this.getMaxElevation(cardView); float radius = this.getRadius(cardView); // ��������������������� int hPadding = (int) Math.ceil((double) RoundRectDrawableWithShadow.calculateHorizontalPadding(elevation, radius, cardView.getPreventCornerOverlap())); // ��������������������� int vPadding = (int) Math.ceil((double) RoundRectDrawableWithShadow.calculateVerticalPadding(elevation, radius, cardView.getPreventCornerOverlap())); cardView.setShadowPadding(hPadding, vPadding, hPadding, vPadding); // ��������������� }}
���������������������setShadowPadding���������������������CardView������������������������������������������������CardView���������API���������������������������������������������
CardViewDelegate������������
���CardView���������������������������CardViewDelegate���
public CardView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { // ...���������������������... this.mCardViewDelegate = new CardViewDelegate() { // ������������������... }; TypedArray a = ... IMPL.initialize(this.mCardViewDelegate, context, backgroundColor, radius, elevation, maxElevation);}
CardViewDelegate���������CardViewAppComponent���������������������������������������������������������������������������������
XML���������������
���������������������CardView���������������������������XML���������������������
���������������������������������������������������CardView���������������������������������������������������������������������
���������������API���������������
���������CardView������������������������������������������������������������������������������������
<��vod��>
���������������������������������������������������������������������������������������������������������������������������������������������������
������
CardView���������������API���������������������������Android���������������������������������������������������������������������������������������������������������������������������������
发表评论
最新留言
关于作者
