上周看到群里有同学谈到自定义进度条的的问题,自己就针对百分数进度条自定义了一个。源码已经传到github上啦,可以下载下来直接能够运行的,也可以直接在里面根据自己的需求进行修改代码!

针对上周有朋友提的建议:上效果图。

图1

图1这个就是自定义的百分数在进度条上的一个NumberProgressBar,而且在右上角设置了一个取消定时的按钮,便于我们跑一次程序可以多次验证进度条的效果。【不然可能程序运行一次,只能看到一次效果。我建议:大家在写demo的时候也最好采用这样的方式】。

我这里只是为了模拟下进度条的加载效果,所以在运行至100%时,默认的显示了本地中的一张图片。嗯嗯,效果不错,图片效果不错。

在这里,说一下主要的逻辑:细节的还是大家自己去github上下载源码研究下。

自定义进度条的属性:高度,长度,空白区域,百分数,进度条的颜色(已经加载/未加载),最大值,文字颜色,文字大小,文本的宽度,开始绘制,结束绘制等等。

绘制控件:包括:画笔的初始化,已经加载的画笔,未加载的画笔,文本的画笔。

设置监听:进度条是自动加载的,所以要设置定时任务,然后设置进度条的监听,时刻进行进度条的刷新。

任务处理的执行。

设备旋转时会导致数据的丢失,我们继承了View,好在View给我们

onSaveInstanceState()和onRestoreInstanceState()。

我们就来看下这两个方法,首先这两个方法跟Acticity中的相似方法的主要区别在于Activity是用Bundle进行数据传递的,而View是通过Parcelable进行传递的。

如果使用Parcelable对象传递自定义数据就需要实现Parcelable接口和CTRATE静态常量,不但复杂而且代码量很大。但是我们这次是基于RectF作为基础数据,因为RectF是Android提供的并且已经实现了Parcelable接口和CTRATE静态常量,这就很方便啦。

在onSaveInstanceState()方法中,我们必须将父类保存的数据保存在Parcelable对象中,否则会发生崩溃。

所以我这样来操作,

bundle.putParcelable(INSTANCE_STATE,super.onSaveInstanceState());

父类保存数据和RectF自定义数据保存在里面,由于Bundle也是实现了

Parcelable接口和CREATE常量的,所以在View 中两个方法传递数据是OK的。

@Override protected Parcelable onSaveInstanceState(){

final Bundle bundle = new Bundle();

bundle.putParcelable(INSTANCE_STATE, super.onSaveInstanceState());

bundle.putInt(INSTANCE_TEXT_COLOR, getTextColor());

bundle.putFloat(INSTANCE_TEXT_SIZE, getProgressTextSize());

bundle.putFloat(INSTANCE_REACHED_BAR_HEIGHT, getReachedBarHeight());

bundle.putFloat(INSTANCE_UNREACHED_BAR_HEIGHT, getUnreachedBarHeight());

bundle.putInt(INSTANCE_REACHED_BAR_COLOR, getReachedBarColor());

bundle.putInt(INSTANCE_UNREACHED_BAR_COLOR, getUnreachedBarColor());

bundle.putInt(INSTANCE_MAX, getMax());

bundle.putInt(INSTANCE_PROGRESS, getProgress());

bundle.putString(INSTANCE_SUFFIX, getSuffix());

bundle.putString(INSTANCE_PREFIX, getPrefix());

bundle.putBoolean(INSTANCE_TEXT_VISIBILITY, getProgressTextVisibility());

return bundle;

}

在onRestoreInstanceState方法中,我们需要讲State强制转化成Bundle对象

@Override protected void onRestoreInstanceState(Parcelable state){

if (state instanceof Bundle) {

final Bundle bundle = (Bundle) state;

mTextColor = bundle.getInt(INSTANCE_TEXT_COLOR);

mTextSize = bundle.getFloat(INSTANCE_TEXT_SIZE);

mReachedBarHeight = bundle.getFloat(INSTANCE_REACHED_BAR_HEIGHT);

mUnreachedBarHeight = bundle.getFloat(INSTANCE_UNREACHED_BAR_HEIGHT);

mReachedBarColor = bundle.getInt(INSTANCE_REACHED_BAR_COLOR);

mUnreachedBarColor = bundle.getInt(INSTANCE_UNREACHED_BAR_COLOR);

initializePainters();

setMax(bundle.getInt(INSTANCE_MAX));

setProgress(bundle.getInt(INSTANCE_PROGRESS));

setPrefix(bundle.getString(INSTANCE_PREFIX));

setSuffix(bundle.getString(INSTANCE_SUFFIX));

setProgressTextVisibility(bundle.getBoolean(INSTANCE_TEXT_VISIBILITY) ? ProgressTextVisibility.Visible : ProgressTextVisibility.Invisible);

super.onRestoreInstanceState(bundle.getParcelable(INSTANCE_STATE));

return;

}

super.onRestoreInstanceState(state);

}

具体的细节,大家可以在留言区一起讨论,交流学习。

另外我当时为了和普通的百分数进度条对比,也做了个普通的进度条,效果如下:

实现细节:

也就是我们用一个横向的ProgressBar,百分数是一个textView然后下一个定时器,不断的更新textView的数值。

只是重点为了给大家分享自定义的百分数进度条的效果,所以我注视了这部分代码。相应的调整下代码,运行程序就可以看到这个效果。

步骤一:在布局中放开这段代码,注释掉相应的自定义的布局代码

步骤二:在MainActivity中放开这段代码,注释掉关于自定义的代码:

mPb_button = (ProgressBar) findViewById(R.id.pb_button);

mPb_textView = (TextView) findViewById(R.id.tvpb);

mPb_image = (ImageView) findViewById(R.id.pb_image);

new Thread(){

@Override        public void run(){

int i =0;

while (i<=100){

i++;

try {

Thread.sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

final int j =i;

mPb_button.setProgress(i);

runOnUiThread(new Runnable() {

@Override                    public void run(){

mPb_textView.setText(j+"%");

}

});

}

if (i>100) {

mHandler.sendEmptyMessage(0);

}

}

}.start();

操作完前两步之后,运行程序即可看到图2的效果。

项目源码:https://github.com/yangziling/NumberProgressBar.git

掘金:https://juejin.im/user/57db765367f3560056983807

本文内容转载自网络,本着传播与分享的原则,来源/作者信息已在文章顶部表明,版权归原作者所有,如有侵权请联系我们进行删除!

Android 自定义各种进度条,Android自定义百分数进度条相关推荐

  1. Android自定义滑动进度条,Android自定义View实现圆形水波进度条

    每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...

  2. android 自定义 进度条 旋转,Android_Android ProgressBar进度条使用详解,ProgressBar进度条,分为旋转进 - phpStudy...

    Android ProgressBar进度条使用详解 ProgressBar进度条,分为旋转进度条和水平进度条,进度条的样式根据需要自定义,之前一直不明白进度条如何在实际项目中使用,网上演示进度条的案 ...

  3. Android 下载进度条, 自定义加载进度条,loading动画

    1.自定义loadingline动画 /*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/9/6 10*/public class Lo ...

  4. android绘制环形进度_Android动态自定义圆形进度条

    这篇文章主要介绍了Android动态自定义圆形进度条,需要的朋友可以参考下 效果图: A.绘制圆环,圆弧,文本 //1.画圆环 //原点坐标 float circleX = width / 2; fl ...

  5. android自定义进度条百分比跟着走,Android自定义View实现水平带数字百分比进度条...

    这个进度条可以反映真实进度,并且完成百分比的文字时随着进度增加而移动的,所在位置也恰好是真实完成的百分比位置,效果如下: 思路如下:第一部分是左侧的蓝色直线,代表已经完成的进度:第二部分是右侧灰色的直 ...

  6. Android仿虾米音乐播放器之自定义进度条seekbar

    先上图吧,仿照写的进度条 很明显不是系统的自带的进度条,所以我们需要自定义来实现这个效果,先看看官方给的例子 <layer-list xmlns:android="http://sch ...

  7. android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解

    1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...

  8. Android基础控件——SeekBar的自定义,超短代码模仿抖音带有数字拖拽进度条

    前言 在开发中,经常会遇到SeekBar组件的开发,一个高效的自定义SeekBar显得尤为重要,笔者刚好也在项目中大量使用带有数字的拖拽进度条,在深思熟虑后,打算从继承源码形式上,把数字绘制在拖拽进度 ...

  9. android 环形时间显示_Android_Android实现自定义圆形进度条,今天无意中发现一个圆形进度 - phpStudy...

    Android实现自定义圆形进度条 今天无意中发现一个圆形进度,想想自己实现一个,如下图: 基本思路是这样的: 1.首先绘制一个实心圆 2.绘制一个白色实心的正方形,遮住实心圆 3.在圆的中心动态绘制 ...

最新文章

  1. JAVASCRIPT复制到剪贴板
  2. linux apt-get update 和 upgrade 的区别
  3. 设计模式(七):桥接模式
  4. #pragma message的作用
  5. 信息系统项目管理师选择案例论文三方面考试心得分享
  6. mysql-5.5密码是多少_关于mysql-5.5数据库密码的设置和重置
  7. 数据结构实验之查找二:平衡二叉树
  8. 精通数据科学_10篇文章变得更加精通数据科学
  9. 无心剑中译奥修《爱、婚姻与自由》
  10. android git项目管理,Android Studio中如何使用Git和Github来管理项目
  11. uniapp h5在线预览word文档ppt等
  12. HDU 2202 POJ 2079 求平面最大三角形 【旋转卡壳】
  13. 前端基础学习之Sass
  14. 微博、微信朋友圈、QQ空间功能对比
  15. ES 创建太多 buckets 错误: trying to create too many buckets. must be less than or equal to: [100000] but w
  16. 运算放大器分析----虚短和虚断(转载)
  17. pytorch项目报错:ImportError: no module named “cd“
  18. 常见锐捷光模块型号大全
  19. 【强化学习】用强化学习通关超级马里奥!
  20. python新浪股票接口_python 爬虫sina股票数据

热门文章

  1. MATLAB绘制直方图和阶梯形图
  2. win7锁定计算机任务栏,Windows7任务栏锁定功能怎么使用?win7使用任务栏锁定功能的方法...
  3. QGIS入门实验十六 迁徙图制作
  4. C#对接条码电子秤拉取和下发数据
  5. 【报错处理】Mac系统 错误使用 xlsread (第 257 行) Biffparse 无法读取文件。记录 ID 无效。
  6. On Rate Distortion Optimization Using SSIM
  7. 八位一体共阴极数码管显示电子时钟+闹铃+温度检测
  8. java httpClient Digest Auth 认证
  9. [附源码]计算机毕业设计JAVA网上学车预约系统
  10. Spring学习——新建module模块