一种带范围的进度条的实现方法技术

技术编号:19820810 阅读:22 留言:0更新日期:2018-12-19 14:21
本发明专利技术涉及一种带范围的进度条的实现方法,包括如下步骤:定义边框控件KwRangeSeekBar,在onSizeChanged回调中获取控件KwRangeSeekBar的高度h,计算得到可用的进度范围,获取标识范围的左、右边标记的横坐标,在onTouchEvent的回调中,处理用户抬起的操作,提供对外接口setTime,在onDraw回调中,依次绘制进度条背景,绘制二级进度条,绘制滑块和带范围的标记。本发明专利技术,自定义进度条控件继承与Android系统提供的SeekBar控件,重写onDraw回调,对外提供接口,调用接口则显示带进度的进度条,否则显示正常的进度条,用户可自定义相关参数,扩展性好,兼容现有进度条,易于使用、维护。

【技术实现步骤摘要】
一种带范围的进度条的实现方法
本专利技术涉及进度条计算及呈现
,具体说是一种带范围的进度条的实现方法。
技术介绍
Android输入控件是一种用于人机交互的元件,AndroidSDK为此提供了各种各样的输入控件,包括:原生控件,例如:文本域(TextView)、按钮(Button)、编辑框(EditText)、单选按钮(RadioButton)、列表控件(ListView)以及显示图片控件(ImageView)等,布局控件,例如:Linearlayout、Relativelayout、Framelayout以及不太常用的TableLayout等等。利用这些基础的输入控件,能实现普通的布局展示,但对于特殊的应用场景,比如复杂的动画展示,或者特别的图形图像要求,利用这些基础的输入控件无法实现,因此就需要自定义控件来满足特别的需求。在Android系统中,自定义控件,主要包括两类:第一类,组合自定义控件,是指使用系统提供的各种界面控件,通过自定义封装成包括多个系统控件的自定义控件,代码在内部处理各子控件的交互,简化使用。第二类,自绘制控件,是指通过继承系统提供的各种界面控件,在控件的测量、布局、绘制三个方法中,使用代码进行测量、绘制、处理交互事件的自定义控件。自绘制控件能提供比系统控件更新颖的界面、更丰富的交互方式。进度条控件是安卓的基础控件之一,具体说是ProgressBar控件,其继承与View类。进度条在App中非常常见,例如下载进度、加载图片、打开文章、打开网页等等……都需要这么一个效果让用户知道我们的App正在读取,以构造良好的交互。如果没有这样一个效果的话,用户没法知道东西有没有下载好、图片加载了没有、文章打开了没……会让用户很不爽。基于这样的情景,为了丰富进度条的呈现效果,满足用户个性化选择的需求,拟开发新式样的进度条控件。
技术实现思路
针对现有技术中存在的缺陷,本专利技术的目的在于提供一种带范围的进度条的实现方法,自定义进度条控件继承与Android系统提供的SeekBar控件,重写onDraw回调,对外提供接口,调用接口则显示带进度的进度条,否则显示正常的进度条,用户可自定义相关参数,扩展性好,兼容现有进度条,易于使用、维护。为达到以上目的,本专利技术采取的技术方案是:一种带范围的进度条的实现方法,其特征在于,包括如下步骤:定义边框控件KwRangeSeekBar,继承android系统提供的KwSeekBar控件,在onSizeChanged回调中获取控件KwRangeSeekBar的高度h,进度条可用的区域available,进度条总的宽度减去左右内边距,得到可用的进度范围,获取标识范围的左边标记的横坐标mTagLeft,mTagLeft=getX(mStartProgress),获取标识范围的右边标记的横坐标mTagRight,mTagRight=getX(mEndProgress),其中,mStartProgress是外部传递给KwRangeSeekBar进度条的起始进度,mEndProgress是外部传递给KwRangeSeekBar进度条的结束进度,getX是根据进度获取横坐标的函数,在onTouchEvent的回调中,处理用户抬起的操作,提供对外接口setTime,在onDraw回调中,绘制进度条的三种进度值,具体包括:绘制进度条背景,根据变量布尔型变量isRangeSeekbar绘制二级进度条,绘制滑块和带范围的标记。在上述技术方案的基础上,在边框控件KwRangeSeekBar中,定义画笔mPaint和mPaintTag的画笔Paint对象,用来绘制进度条和竖线标记;定义mRectLeft,mRectRight,表示左边和右边圆角矩形的带颜色区域,是RectF类型的变量;定义mStartProgress,mEndProgress,进度范围的起始值和最大值,类型是int。在上述技术方案的基础上,mCenterY=h/2;表示控件KwRangeSeekBar的中间的高度,绘制进度条的时候,在这个高度上绘制。在上述技术方案的基础上,getX函数的具体步骤为:调用SeekBar控件的系统apigetMax,获取进度条的最大进度值max,计算出当前进度和总进度的比例sacle,scale=progress*1.0f/max,progress是输入参数,表示当前的进度,计算scale*available+getPaddingLeft(),返回计算结果,就根据进度值计算出了对应进度条的左边标记的横坐标值mTagLeft,available是可用的进度条的宽度,getPaddingLeft()是SeekBar控件提供的获取左边距的api,按如上算法相应的计算出对应进度条的右边标记的横坐标值mTagRight。在上述技术方案的基础上,处理用户抬起的操作时,调用getProgress根据当前的用户点击的横坐标,获取对应的进度值,具体步骤如下:设touchX是点击的横坐标值,getPaddingLeft获取左边距,这样最大进度除以可用进度条的宽度,再乘以当前触摸的横坐标,就计算出了横坐标对应的进度值,获取了新的进度值以后,调用seekTo对其进行校正,具体步骤如下:当前进度如果小于范围的最小进度mStartProgress,就调用SeekBar的setProgress设置最小进度,如果大于范围的最大进度,mEndProgress,就调用SeekBar的setProgress设置最大进度,如果上边两种情况都不属于,就调用调用SeekBar的setProgress设置当前进度;如果newProgress小于最小进度或者大于最大进度,返回true,代表处理了该操作,并且刷新进度条。在上述技术方案的基础上,对外接口setTime,提供以下可接受的参数:setTime(intstartTime,intendTime,intduration)参数startTime是进度范围的开始时间,endTime是进度条范围的结束时间,duration是歌曲的总时长。在上述技术方案的基础上,绘制进度条背景,具体包括:给画笔设置颜色,mPaint.setColor(COLOR_PROGRESS_DEFAULT);在进度条的画布canvas,调用drawLine绘制一条直线,getPaddingLeft是进度条的内边距,mCenterY是进度条的高度的一半,getWidth()-getPaddingRight()是进度条宽度与右边距的差值,这样就绘制了一条直线,作为进度条的背景,canvas.drawLine(getPaddingLeft(),mCenterY,getWidth()-getPaddingRight(),mCenterY,mPaint)。在上述技术方案的基础上,根据变量布尔型变量isRangeSeekbar绘制二级进度条,具体包括:根据是否是带范围的进度条变量isRangeSeekbar来分别绘制进度条,如果是带范围的,就从范围的左标记开始绘制,如果不是就从左边距开始绘制,调用getX处理二级进度条的进度mSecondProgress,得到进度值对应的横坐标secondProgressX,给画笔设置预设本文档来自技高网
...

【技术保护点】
1.一种带范围的进度条的实现方法,其特征在于,包括如下步骤:定义边框控件KwRangeSeekBar,继承android系统提供的KwSeekBar控件,在onSizeChanged回调中获取控件KwRangeSeekBar的高度h,进度条可用的区域available,进度条总的宽度减去左右内边距,得到可用的进度范围,获取标识范围的左边标记的横坐标mTagLeft,mTagLeft = getX(mStartProgress),获取标识范围的右边标记的横坐标mTagRight,mTagRight = getX(mEndProgress),其中,mStartProgress是外部传递给KwRangeSeekBar进度条的起始进度,mEndProgress是外部传递给KwRangeSeekBar进度条的结束进度,getX是根据进度获取横坐标的函数,在onTouchEvent的回调中,处理用户抬起的操作,提供对外接口setTime,在onDraw回调中,绘制进度条的三种进度值,具体包括:绘制进度条背景,根据变量布尔型变量isRangeSeekbar绘制二级进度条,绘制滑块和带范围的标记。

【技术特征摘要】
1.一种带范围的进度条的实现方法,其特征在于,包括如下步骤:定义边框控件KwRangeSeekBar,继承android系统提供的KwSeekBar控件,在onSizeChanged回调中获取控件KwRangeSeekBar的高度h,进度条可用的区域available,进度条总的宽度减去左右内边距,得到可用的进度范围,获取标识范围的左边标记的横坐标mTagLeft,mTagLeft=getX(mStartProgress),获取标识范围的右边标记的横坐标mTagRight,mTagRight=getX(mEndProgress),其中,mStartProgress是外部传递给KwRangeSeekBar进度条的起始进度,mEndProgress是外部传递给KwRangeSeekBar进度条的结束进度,getX是根据进度获取横坐标的函数,在onTouchEvent的回调中,处理用户抬起的操作,提供对外接口setTime,在onDraw回调中,绘制进度条的三种进度值,具体包括:绘制进度条背景,根据变量布尔型变量isRangeSeekbar绘制二级进度条,绘制滑块和带范围的标记。2.如权利要求1所述的带范围的进度条的实现方法,其特征在于:在边框控件KwRangeSeekBar中,定义画笔mPaint和mPaintTag的画笔Paint对象,用来绘制进度条和竖线标记;定义mRectLeft,mRectRight,表示左边和右边圆角矩形的带颜色区域,是RectF类型的变量;定义mStartProgress,mEndProgress,进度范围的起始值和最大值,类型是int。3.如权利要求1所述的带范围的进度条的实现方法,其特征在于:mCenterY=h/2;表示控件KwRangeSeekBar的中间的高度,绘制进度条的时候,在这个高度上绘制。4.如权利要求1所述的带范围的进度条的实现方法,其特征在于:getX函数的具体步骤为:调用SeekBar控件的系统apigetMax,获取进度条的最大进度值max,计算出当前进度和总进度的比例sacle,scale=progress*1.0f/max,progress是输入参数,表示当前的进度,计算scale*available+getPaddingLeft(),返回计算结果,就根据进度值计算出了对应进度条的左边标记的横坐标值mTagLeft,available是可用的进度条的宽度,getPaddingLeft()是SeekBar控件提供的获取左边距的api,按如上算法相应的计算出对应进度条的右边标记的横坐标值mTagRight。5.如权利要求1所述的带范围的进度条的实现方法,其特征在于:处理用户抬起的操作时,调用getProgress根据当前的用户点击的横坐标,获取对应的进度值,具体步骤如下:设touchX是点击的横坐标值,getPaddingLeft获取左边距,这样最大进度除以可用进度条的宽度,再乘以当前触摸的横坐标,就计算出了横坐标对应的进度值,获取了新的进度值以后,调用seekTo对其进行校正,具体步骤如下:当前进度如果小于范围的最小进度mStartProgress,就调用SeekBar的setProgress设置最小进度,如果大于范围的最大进度,mEndProgress,就调用SeekBar的setProgress设置最大进度,如果上边两种情况...

【专利技术属性】
技术研发人员:孙征
申请(专利权)人:北京酷我科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1