Android 自定义各种进度条,Android自定义百分数进度条
上周看到群里有同学谈到自定义进度条的的问题,自己就针对百分数进度条自定义了一个。源码已经传到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自定义百分数进度条相关推荐
- Android自定义滑动进度条,Android自定义View实现圆形水波进度条
每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...
- android 自定义 进度条 旋转,Android_Android ProgressBar进度条使用详解,ProgressBar进度条,分为旋转进 - phpStudy...
Android ProgressBar进度条使用详解 ProgressBar进度条,分为旋转进度条和水平进度条,进度条的样式根据需要自定义,之前一直不明白进度条如何在实际项目中使用,网上演示进度条的案 ...
- Android 下载进度条, 自定义加载进度条,loading动画
1.自定义loadingline动画 /*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/9/6 10*/public class Lo ...
- android绘制环形进度_Android动态自定义圆形进度条
这篇文章主要介绍了Android动态自定义圆形进度条,需要的朋友可以参考下 效果图: A.绘制圆环,圆弧,文本 //1.画圆环 //原点坐标 float circleX = width / 2; fl ...
- android自定义进度条百分比跟着走,Android自定义View实现水平带数字百分比进度条...
这个进度条可以反映真实进度,并且完成百分比的文字时随着进度增加而移动的,所在位置也恰好是真实完成的百分比位置,效果如下: 思路如下:第一部分是左侧的蓝色直线,代表已经完成的进度:第二部分是右侧灰色的直 ...
- Android仿虾米音乐播放器之自定义进度条seekbar
先上图吧,仿照写的进度条 很明显不是系统的自带的进度条,所以我们需要自定义来实现这个效果,先看看官方给的例子 <layer-list xmlns:android="http://sch ...
- android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解
1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...
- Android基础控件——SeekBar的自定义,超短代码模仿抖音带有数字拖拽进度条
前言 在开发中,经常会遇到SeekBar组件的开发,一个高效的自定义SeekBar显得尤为重要,笔者刚好也在项目中大量使用带有数字的拖拽进度条,在深思熟虑后,打算从继承源码形式上,把数字绘制在拖拽进度 ...
- android 环形时间显示_Android_Android实现自定义圆形进度条,今天无意中发现一个圆形进度 - phpStudy...
Android实现自定义圆形进度条 今天无意中发现一个圆形进度,想想自己实现一个,如下图: 基本思路是这样的: 1.首先绘制一个实心圆 2.绘制一个白色实心的正方形,遮住实心圆 3.在圆的中心动态绘制 ...
最新文章
- JAVASCRIPT复制到剪贴板
- linux apt-get update 和 upgrade 的区别
- 设计模式(七):桥接模式
- #pragma message的作用
- 信息系统项目管理师选择案例论文三方面考试心得分享
- mysql-5.5密码是多少_关于mysql-5.5数据库密码的设置和重置
- 数据结构实验之查找二:平衡二叉树
- 精通数据科学_10篇文章变得更加精通数据科学
- 无心剑中译奥修《爱、婚姻与自由》
- android git项目管理,Android Studio中如何使用Git和Github来管理项目
- uniapp h5在线预览word文档ppt等
- HDU 2202 POJ 2079 求平面最大三角形 【旋转卡壳】
- 前端基础学习之Sass
- 微博、微信朋友圈、QQ空间功能对比
- ES 创建太多 buckets 错误: trying to create too many buckets. must be less than or equal to: [100000] but w
- 运算放大器分析----虚短和虚断(转载)
- pytorch项目报错:ImportError: no module named “cd“
- 常见锐捷光模块型号大全
- 【强化学习】用强化学习通关超级马里奥!
- python新浪股票接口_python 爬虫sina股票数据
热门文章
- MATLAB绘制直方图和阶梯形图
- win7锁定计算机任务栏,Windows7任务栏锁定功能怎么使用?win7使用任务栏锁定功能的方法...
- QGIS入门实验十六 迁徙图制作
- C#对接条码电子秤拉取和下发数据
- 【报错处理】Mac系统 错误使用 xlsread (第 257 行) Biffparse 无法读取文件。记录 ID 无效。
- On Rate Distortion Optimization Using SSIM
- 八位一体共阴极数码管显示电子时钟+闹铃+温度检测
- java httpClient Digest Auth 认证
- [附源码]计算机毕业设计JAVA网上学车预约系统
- Spring学习——新建module模块