Android 描边颜色渐变进度条

【Kotlin】使用 ProgressBar 的样式属性来实现圆形进度条,进度使用gradient渐变效果 Android ProgressBar 默认提供了水平和圆形两种进度条,水平进度条通过控件实现,而圆形进度条通过控件实现。如果想要将控件设置为圆形进度条,可以使用的样式属性来实现。首先,在布局文件中添加一个控件,并设置其样式为style在上面的代码中,我们设置了的样式为,并将属性设置为true,表示使用不确定模式。然后,在 styles.xml 文件中,定义一个名为的样式,将其父样式设置为,并将其样式属性设置为一个圆形进度条的 Drawable: 阅读详情

public class ColorGradientProgressBar extends View {

 

/**

* 渐变颜色组

*/

private int[] GRADIENT_COLORS = {Color.parseColor("#85D0E8"), Color.parseColor("#138CCF")};

/**

* 最大进度

*/

private float max = 100;

/**

* 当前进度

*/

private float progress;

/**

* 画笔

*/

private Paint mPaint;

/**

* 外描边的宽度

*/

private float BORDER_STROCK;

/**

* 进度条进度矩形与控件边界的距离,≥BORDER_STROCK

*/

private float PROGRESS_STROCK;

//进度条的宽高

private int mWidth, mHeight;

/**

* 画进度条的矩形

*/

private RectF mRectF;

 

public ColorGradientProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initView();

}

 

public ColorGradientProgressBar(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

 

public ColorGradientProgressBar(Context context) {

this(context, null);

}

 

private void initView() {

mPaint = new Paint();

mPaint.setAntiAlias(true);

mRectF = new RectF();

BORDER_STROCK = getResources().getDimension(R.dimen.x3);

PROGRESS_STROCK = getResources().getDimension(R.dimen.x5);

}

 

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

 

int round = mHeight / 2;//弧度为高度的一半

mRectF.set(0, 0, mWidth, mHeight);//第一层矩形(描边层)

mPaint.setColor(Color.parseColor("#A3D8E8"));//第一层矩形颜色(进度条描边的颜色)

canvas.drawRoundRect(mRectF, round, round, mPaint);//画第一层圆角矩形

mPaint.setColor(Color.parseColor("#474C4E"));//第二层矩形颜色(背景层颜色)

mRectF.set(BORDER_STROCK, BORDER_STROCK, mWidth - BORDER_STROCK, mHeight - BORDER_STROCK);//第二层矩形(背景层)

canvas.drawRoundRect(mRectF, round, round, mPaint);//画背景层圆角矩形(盖在描边层之上)

if (progress == 0)//进度为 0不画进度

return;

float section = progress / max;

//第三层矩形(进度层)

mRectF.set(PROGRESS_STROCK, PROGRESS_STROCK, (mWidth - PROGRESS_STROCK) * section, mHeight - PROGRESS_STROCK);

//创建线性颜色渐变器

LinearGradient shader = new LinearGradient(PROGRESS_STROCK, PROGRESS_STROCK,

(mWidth - PROGRESS_STROCK) * section, mHeight - PROGRESS_STROCK, GRADIENT_COLORS, null, Shader.TileMode.MIRROR);

mPaint.setShader(shader);//第三层矩形颜色(进度渐变色)

canvas.drawRoundRect(mRectF, round, round, mPaint);//画第三层(进度层)圆角矩形(盖在背景层之上)

mPaint.setShader(null);//清除之前传递的shader

}

 

/***

* 设置最大进度

*

* @param maxCount

*/

public void setMax(float maxCount) {

this.max = maxCount;

}

 

/***

* 设置当前进度

*

* @param currentCount

*/

public void setProgress(float currentCount) {

this.progress = currentCount > max ? max : currentCount;

invalidate();

}

 

public float getMax() {

return max;

}

 

 

/**

* 测量得到进度条的宽高

*/

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);

int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);

int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);

int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);

if (widthSpecMode == MeasureSpec.EXACTLY || widthSpecMode == MeasureSpec.AT_MOST) {

mWidth = widthSpecSize;

} else {

mWidth = 0;

}

if (heightSpecMode == MeasureSpec.AT_MOST || heightSpecMode == MeasureSpec.UNSPECIFIED) {

mHeight = (int) getResources().getDimension(R.dimen.x20);

} else {

mHeight = heightSpecSize;

}

setMeasuredDimension(mWidth, mHeight);

}

}

 

Android 自带描边颜色渐变炫酷进度条 /** 外描边的宽度 */ private float BORDER_STROCK; /** 进度条进度矩形与控件边界的距离,≥BORDER_STROCK */ private float PROGRESS_STROCK; //进度条的宽高 private int mWidth, mHeight; /** 画进度条的矩形 */ private RectF mRec 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 tF; 阅读详情

相关推荐

Android 自带描边颜色渐变炫酷进度条(1)

2. 画第二个圆角矩形作为进度条的第二层(背景层)盖在描边层之上3. 画第三个圆角矩形作为进度条的最外层(进度层)盖在背景层之上4. 描边层和背景层颜色可用纯色,进度层为了炫酷可用渐变色这是实现该自带描边颜色渐变进度条的原理,也是在PS中实现该效果的步骤,同样适用于在Android中用代码来实现。原理明白之后,代码就变得非常简单了:/***//***//***//***//***//***///进度条的宽高/***/initView();

2301_76352508的博客 917

android自定义ProgressView长条渐变色的进度条,实现渐变色的效果

android自定义ProgressView长条渐变色的进度条,实现渐变色的效果,不适用一张图片实现! 具体思路:http://blog.csdn.net/springsky_/article/details/17954765

Android 自带描边颜色渐变炫酷进度条,面试必知必会

3. 画第三个圆角矩形作为进度条的最外层(进度层)盖在背景层之上 4. 描边层和背景层颜色可用纯色,进度层为了炫酷可用渐变色 这是实现该自带描边颜色渐变进度条的原理,也是在PS中实现该效果的步骤,同样适用于在Android中用代码来实现。 原理明白之后,代码就变得非常简单了: public class ColorGradientProgressBar extends View { /** 渐变颜色组 */ private int[] GRADIENT_COLORS = {Color.parseColor

wa32saa的博客 1106

android shape的使用及渐变色、分割线、边框、半透明阴影

主要介绍了android shape的使用及渐变色、分割线、边框、半透明阴影,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

安卓渐变的背景框实现

安卓渐变的背景框实现

StramChen的博客 5473

Android自定义View实现渐变进度条

1. 渐变色,看起来颜色变化并不复杂,使用LinearGradient应该可以实现。 2. 圆头,无非是画两个圆,外圆使用渐变色的颜色,内圆固定为白色。 3. 灰底,还没有走到的进度部分为灰色。 4. 进度值,使用文本来显示; 5. 弧形的头部,考虑使用直线进行连接,或者使用曲线,例如贝塞尔曲线; 我首先初步实现了进度条的模样,发现样子有了,却不太美观。 反思了一下,我只是个写代码的,对于哪种比例比较美观,是没有清晰的认识的,所以,还是参考原图吧。

嘴巴吃糖了 1466

Android 自带描边颜色渐变炫酷进度条(1),android应用程序开发期末考试

//进度条的宽高 private int mWidth, mHeight; /** 画进度条的矩形 */ private RectF mRectF; public ColorGradientProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } public ColorGradientProgressBar(Context

wa2231a的博客 187

50家大厂面试万字精华总结-+-面试100-问,又一篇吊打面试官系列,2021Android春招面试真题详解

总目录 1、Handler Looper Message 关系是什么? 2、Messagequeue 的数据结构是什么?为什么要用这个数 据结构? 三、最后 简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度

m0_64319298的博客 1300

Android使用shape属性绘制边框内渐变

使用shape属性绘制带有渐变色边框

nanjumufeng的博客 5251

Android实现自定义圆角边框渐变

Android实现自定义圆角边框渐变 各式各样的布局实现

你全家都是博客 3550

android shape 渐变描边

【代码】android shape 渐变描边

AdrianAndroid的专栏 2531

Android进度条ProgressBar使用详解

先介绍一下ProgressBar几种比较常用的属性 布局中设置: android:max="100" ——最大显示进度 android:progress="50"——第一显示进度 android:secondaryProgress="80"——第二显示进度 android:indeterminate="true"——设置是否精确显示,true表示不精确显示进度,false表示精确显示进度 ...

小旭的专栏 2万+
上一篇: Android WebView去加载网页在部分手机上闪退问题
下一篇: Android 中selector的使用
Keepsty
博客等级 码龄9年 3粉丝 52原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值