Android CardView全解析(二)

我们接着上一篇 Android CardView全解析(一)往下讲哈,上一节为了演示一下RoundRectDrawableWithShadow的用法就一股脑写完了,也没有注释,这一节我们将针对RoundRectDrawableWithShadow做一下注释。

上一节最后的效果图:

这里写图片描述

跟系统的cardview相比,感觉我们设置的阴影有点丑哈~~我们去掉我们设置的shadowstartcolor跟shadowendcolor,然后运行我们的代码:

这里写图片描述

是不是跟系统一样了呢?? 至于要配置什么颜色的shadow,大家自己去配置哈~~

package com.yasin.round.card;

import android.content.res.ColorStateList;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.RadialGradient;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;

/**
 * Created by leo on 17/4/1.
 */

public class RoundRectDrawableWithShadow extends Drawable {
   
   
    //下移的偏移量
    private static final float SHADOW_MULTIPLIER = 1.5f;
    //画圆角矩形帮助类
    public static RoundRectHelper mRoundRectHelper;
    //背景颜色
    private ColorStateList mBgColor;
    //四周shadow起始颜色
    private int mShadowStartColor;
    //四周shadow结束颜色
    private int mShadowEndColor;
    //圆角半径
    private float mCornerRadius;
    //阴影的宽度
    private float mShadowSize;
    //是否需要进行初始化(防止多次调用初始化方法)
    private boolean mDirty = true;
    //内容部分的矩形范围
    private RectF mCardBounds = new RectF();
    //画背景用的画笔
    private Paint mPaint;
    //画边角阴影的画笔
    private Paint mCornerShadowPaint;
    //画四周shadow的画笔
    private Paint mEdgeShadowPaint;
    //边角path路径
    private Path mCornerShadowPath;

    public RoundRectDrawableWithShadow(ColorStateList bgColor, int shadowStartColor, int shadowEndColor, float shadowSize, float radius) {
        this.mShadowStartColor = shadowStartColor;
        this.mShadowEndColor = shadowEndColor;
        this.mShadowSize = shadowSize;
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
        //设置view的背景颜色
        setBackground(bgColor);
        mCornerShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
        mCornerShadowPaint.setStyle(Paint.Style.FILL);
        //为了能使设置的corner更接近一个整数值
        this.mCornerRadius = (int) (radius + .5f);
        mCardBounds = new RectF();
        mEdgeShadowPaint = new Paint(mCornerShadowPaint);
        mEdgeShadowPaint.setAntiAlias(false);
    }

    private void setBackground(ColorStateList color) {
        //如果用户有设置背景色的就用设置的背景色,如果没有就用透明色
        mBgColor = (color == null) ? ColorStateList.valueOf(Color.TRANSPARENT) : color;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值