android 带刻度的滑动条_Android实现底部带刻度的进度条样式

这篇博客介绍了如何在Android中实现一个底部带有刻度的进度条样式。作者因为项目需求,没有采用添加背景图片的方式,而是选择自定义控件通过Canvas绘制。详细步骤包括测量布局、初始化画笔、绘制进度条和刻度,以及动态更新刻度数值。代码示例展示了如何绘制进度条底框、当前进度、刻度线和数值,并提供了设置起始值、最大值和进度百分比的方法。
摘要由CSDN通过智能技术生成

由于公司需要一个带刻度的进度条样式,网上找了一圈,有些是加个刻度的背景图片,这样对于我的项目来说,不合适,因为刻度需要动态去改变,所以换背景图片的方案肯定是不行的,唯一的办法就是自己绘制一个进度条,进度条的绘制相对来说是比较简单的。我自己对自定义控件这一块也不是很了解,全当学习一下吧,写这篇博客也是记录一下,如果有人也有这样样式的进度条需求,也可以直接拿过去用,比较自己也用过很多大神的东西。

开始就先上图吧

样式就是上图这样了,由于是通过canvas绘制的,所以想要的样式都可以自己去绘制,我这边就搞一个简单的就行了。

首先得继承View,由于这个控件比较简单,我就没有搞那种在布局文件中设值的属性了,继承之后第一步,需要测量布局,得到画布的大小,这个值其实就是我们在布局文件中设置的控件的宽高。

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int realWidth = startMeasure(widthMeasureSpec);

int realHeight = startMeasure(heightMeasureSpec);

setMeasuredDimension(realWidth, realHeight);

}

private int startMeasure(int msSpec) {

int result = 0;

int mode = MeasureSpec.getMode(msSpec);

int size = MeasureSpec.getSize(msSpec);

if (mode == MeasureSpec.EXACTLY) {

result = size;

} else {

result = PxUtils.dpToPx(400, mContext);

}

return result;

}

这边拿到画布的大小,设置进度条显示的宽度,我这边设置的为画布宽度的80%

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

mWidth = getWidth();

mHight = getHeight();

progressWidth = mWidth*0.8f;

}

然后就是初始化画笔了,具体我就不多赘述了,我使用了五个画笔,分别是进度条背景底框,进度,刻度绘制,刻度下的字,当前数值的文字具体看代码。

private void initPaint() {

//画进度条静态空心背景

paintProgressBackground = new Paint();

paintProgressBackground.setAntiAlias(true);

paintProgressBackground.setStyle(Paint.Style.STROKE);

paintProgressBackground.setColor(getResources().getColor(R.color.progressborder));

paintProgressBackground.setDither(true);

//画进度的画笔,实心

paintProgress = new Paint();

paintProgress.setAntiAlias(true);

paintProgress.setStyle(Paint.Style.FILL);

paintProgress.setColor(getResources().getColor(R.color.progressfill));

paintProgress.setDither(true);

//画刻度的画笔

paintNum = new Paint();

paintNum.setAntiAlias(true);

paintNum.setColor(getResources().getColor(R.color.progresstext));

paintNum.setStrokeWidth(2);

paintNum.setStyle(Paint.Style.FILL);

paintNum.setDither(true);

//画刻度数值的画笔

paintTikeStr = new Paint();

paintTikeStr.setAntiAlias(true);

paintTikeStr.setStyle(Pa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值