3.1.4_cardView原理解析
发布日期:2021-05-10 09:34:11 浏览次数:15 分类:精选文章

本文共 4287 字,大约阅读时间需要 14 分钟。

CardView���Android������������������������������������������������������������������������UI������������������FrameLayout������������CardView������������������������������������������������������������Android���������������������������������������������������������������������������������������������������������������������������

���������������������

CardView������������������SDK���������������������������������������������������

  • API ��� 21���������CardViewApi21Impl���
  • API ��� 17���������21���������CardViewApi17Impl���
  • ������17������������������CardViewBaseImpl���������������������
  • ���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���������������������������������������������������������������������������������������������������������������������������������

    上一篇:2.1.2 Android刘海屏适配
    下一篇:3.1.3_CoordinatorLayout原理

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月12日 06时15分04秒