Android自带的ProgressBar是不带文字的,加文字的话可以参考这篇博客:http://blog.csdn.net/lixiaodaoaaa/article/details/9852327

本篇博客主要讲有了文字之后的ProgressBar文字的颜色随着进度条增加,看起来有一种进度条覆盖了文字的颜色,模仿点击下载和暂停等效果,效果如下:

代码中通过不断的重载setProgress方法,不停的执行onDraw方法,采用图像混合模式,对进度条和文字进行进度条重绘。主要代码如下:

@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mWidth = getWidth() * mProgress / 100;//进度作一下处理,解决不同分辨率的适配问题mPaint.getTextBounds(mPercentText, 0, mPercentText.length(), mPercentRect);//为了获取文字的宽高以及坐标位置,get之后,rect.centerX才有值mPaint.getTextBounds(mPauseText, 0, mPauseText.length(), mPauseRect);int textX = (getWidth() / 2) - mPauseRect.centerX();//获取“暂停”文字的中心横坐标int textY = (getHeight() / 2) - mPauseRect.centerY();int percentX = (getWidth() / 2) - mPercentRect.centerX();//获取百分比文字的中心横坐标int percentY = (getHeight() / 2) - mPercentRect.centerY();Bitmap srcBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);Canvas srcCanvas = new Canvas(srcBitmap);switch (mStateType) {case Constant.DEFAULT://默认初始化状态drawTextUI(canvas, textX, textY, mDefaultText, srcBitmap, srcCanvas);break;case Constant.PAUSE:drawTextUI(canvas, textX, textY, mPauseText, srcBitmap, srcCanvas);break;case Constant.DOWNLOAD:drawTextUI(canvas, percentX, percentY, mPercentText, srcBitmap, srcCanvas);break;case Constant.FINISH:mPaint.setColor(Color.WHITE);canvas.drawText(mFinishText, textX, textY, mPaint);break;default:drawTextUI(canvas, textX, textY, mDefaultText, srcBitmap, srcCanvas);break;

其中的drawTextUI方法主要控制图像混合模式,从而实现渐变,核心代码如下:

    mPaint.setXfermode(mPorterDuffXfermode);// 设置混合模式mPaint.setColor(Color.WHITE);RectF rectF = new RectF(0, 0, mWidth, getHeight());//mWidth是不断变化的// 绘制源图形srcCanvas.drawRect(rectF, mPaint);// 绘制目标图canvas.drawBitmap(srcBitmap, 0, 0, null);// 清除混合模式mPaint.setXfermode(null);// 恢复画笔颜色mPaint.setColor(Color.parseColor("#00b38a"));

MainActivity主要控制下载和暂停的部分逻辑:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{private TextProgressBar mProgressView;private final int FOR_SCROLL = 1;private final int DELAY = 500;private float mProgress;private int mStateType = Constant.DOWNLOAD;private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case FOR_SCROLL:if(mProgress < 100) {mProgress += 4.0;mProgressView.setProgress(mProgress);mProgressView.setStateType(Constant.DOWNLOAD);mHandler.sendEmptyMessageDelayed(FOR_SCROLL, DELAY);} else {mStateType = Constant.FINISH;mProgressView.setProgress(100);mProgressView.setStateType(mStateType);}break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mProgressView = (TextProgressBar) findViewById(R.id.textProgress);mProgressView.setOnClickListener(this);mProgressView.setStateType(Constant.DEFAULT);String text = String.format("%.1f%%", 53.6897);Toast.makeText(this, text, Toast.LENGTH_SHORT).show();}@Overridepublic void onClick(View v) {if(v == null) {return;}if(v.getId() == R.id.textProgress) {switch (mStateType) {case Constant.DOWNLOAD:mStateType = Constant.PAUSE;mHandler.sendEmptyMessageDelayed(FOR_SCROLL, DELAY);break;case Constant.PAUSE:mStateType = Constant.DOWNLOAD;mProgressView.setStateType(Constant.PAUSE);mHandler.removeMessages(FOR_SCROLL);break;case Constant.FINISH:Toast.makeText(MainActivity.this, getResources().getString(R.string.ok), Toast.LENGTH_SHORT).show();break;}}}@Overrideprotected void onDestroy() {super.onDestroy();mHandler.removeMessages(FOR_SCROLL);}
}

代码未作优化,大体上实现大概功能,有问题一起交流
项目源码,点击下载

2019-1-15更新
因为之前的源码链接积分被系统改的过高,特地重新上传了一份。
点击下载

2020-3-2更新
也是因为积分无缘无故被改高了,又重新手动传了一份
点击下载

2020年9月27日14:55:10更新
同上,积分问题,又被改成了50积分,再次上传一份
点击下载

Android 带文字的进度条,文字颜色随进度条的增加而渐变的效果相关推荐

  1. 高仿手机QQ音乐之——Android带进度条的开关

    最新版的手机QQ音乐体验确实不错,发现首页播放按钮可以显示歌曲当前进度条,觉得挺有新意!效果如下: 自己琢磨了下,可以用自定义组件来实现,试着做了一下,效果如下: 整理了下思路,大概设计流程是这样的: ...

  2. bootstrap导航条文字颜色_XEditor基础组件:导航条

    导航条是网页中最常见的组件之一,它通常位于网页的顶部.当我们想浏览网站的其他部分时,我们常常会回到网页顶部,然后点击导航条中的某个链接,跳转到其他页面. XEditor提供了各种各样的导航条,在使用导 ...

  3. android 自定义menu 背景颜色,Android中设置Menu菜单的文字颜色为白色

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 开发者交流裙: 188168040 Android中设置Menu菜单的文字颜色为白色,一般情况下,Android中Menu菜单的title文字颜色为黑色, ...

  4. java 歌词颜色变色_Axure教程:音乐播放器中,带时间的进度条/歌词颜色变化/旋转元件...

    原标题:Axure教程:音乐播放器中,带时间的进度条/歌词颜色变化/旋转元件 本文以QQ音乐为例,实现了带时间的进度条.歌词颜色变化.唱片旋转.暂停播放等原型交互. 一.效果展示 体验地址:https ...

  5. 自定义Android带图片和文字的ImageButton

    自定义Android带图片的按钮 前言 现在移动设备的按钮设计讲究大图标小文字,希望用户只要一看到图标便能知道这个按钮是干嘛的,但又要有必要的文字提示,最常见的就数搜索按钮了,上面一个大大的放大镜图标 ...

  6. android 水平进度条 自定义颜色,android 水平进度条的颜色设置

    首先在布局文件中定义如下: 再在drawable目录下新增progressbar.xml文件,可以设置默认背景色和进度条的颜色(值得一提的是支持渐变色) 内容如下:

  7. vue自适应带圆圈的进度条实现#根据数量占比计算进度条长度#颜色可控

    一些组件库例如ele的进度条实现只是简单的实现进度条样式,进度条的长度是百分比形式,未做到占比数/总数 去动态计算,这是我在这里要去实现的 不罗嗦,先看样式 <!--@name:进度条封装@de ...

  8. Android自定义View之画圆环(进阶篇:圆形进度条)

    前言: 如果你想读懂或者更好的理解本篇文章关于自定义圆环或圆弧的内容.请你务必提前阅读下Android自定义View之画圆环(手把手教你如何一步步画圆环).在这篇文章中,详细描述了最基本的自定义圆环的 ...

  9. Android开发 之 LinearGradient与闪动文字效果

    LinearGradient与闪动文字效果 转自:http://blog.csdn.net/harvic880925/article/details/52350154 这篇就给大家讲setShader ...

最新文章

  1. 模拟浏览器自动化测试工具Selenium之六设置代理篇
  2. 远距离蓝牙四驱小车方案
  3. 算法提高课-图论-负环-AcWing 904. 虫洞:spfa求负环裸题
  4. python如何使用geotools_基于GeoTools实现道路结点的提取
  5. win10怎么把c盘锁住_老司机教你win10下怎么清理c盘
  6. python实用案例讲解_精心整理!9个 Python 实用案例分享
  7. 查询数据库中表的空间使用情况
  8. 拓端tecdat|R语言GGPLOT2绘制KOLMOGOROV-SMIRNOV KS检验图ECDF经验累积分布函数曲线可视化
  9. ActiveMQ的下载安装与操作示例
  10. 惠威D1080带来精致听音感受
  11. 十大经典排序算法(C语言实现)
  12. Excel如何根据出生日期计算年龄
  13. RN:真机调试无线调试
  14. 炒股魅力:数据分析侠变身“赚钱机器”
  15. 大数据系列(一)之hadoop介绍及集群搭建
  16. 三分钟教会你用U盘装系统,再也不用花钱重装了
  17. Android 学习日记1:AndroidKiller连接网易MuMu模拟器
  18. 2017年衢州联赛 T2
  19. JLink手动添加Artery MCU
  20. WS2812灯珠(五)---移植Adafruit_NeoPixel库

热门文章

  1. php ymt,carcols.ymt转换为XML格式
  2. base64编码用在HTML(支持IE6、IE7、IE8)
  3. 【python】安装python至指定目录
  4. 回顾 | 【Power Platform 中文社区】- 金杜黑客松活动
  5. c 语言private用法,举例分析private的作用(c/c++学习)
  6. LUOGU P2920 [USACO08NOV]时间管理Time Management
  7. Java实现简易21点比大小游戏。(玩家VS电脑)
  8. layui.upload php后端,layui上传图片PHP后台接收并返回网址
  9. Vue事件处理(事件修饰符,键盘事件)
  10. Spring之(三)用Spring改造打印机