前一段时间,因为项目须要研究了下progressbar,发现这个小东西还真是不简单。在这个小控件的显示效果上,花费的时间远大于预估的工作量。话说程序猿一直是这样,预估的工作量远少于实际。。。
       先说明一下,这里主要是针对水平进度条进行说明的,关于圆形进度条或者其它进度条能够依此类推。android系统默认的进度条是圆形的,用到水平进度条一般都会加上这样一个属性:"@android:style/Widget.ProgressBar.Horizontal"。笔者所发现进度条特殊的地方都是从这里開始的。建议大家看这篇文章的时候最好关联源代码或者关联SDK,看到这个属性的内部定义。
        对于textview这类控件,直接使用例如以下两个属性一般就能够达到GUI要求的宽度和高度,

        android:layout_width="wrap_content"android:layout_height="wrap_content"

而对于progressbar,GUI除了会对这个控件本身的大小做一定要求,很多其它的会对这个控件里面的进度条大小有要求。这里就到了第一个特殊点:progressbar相对于textview这类控件来说须要控制两个地方的大小:1.这个控件本身的大小,也就是实际占领的位置;2.这个控件里面用来显示运行进度的那块大小。
        我们假设只设置上面两个属性,会发现里面的进度条不过随着控件本身的增大而同比例增大,也就达不到GUI要求的效果。笔者在阅读Widget.ProgressBar.Horizontal属性源代码时候发现,其内部定义是这种:

    <style name="Widget.ProgressBar.Horizontal"><item name="android:indeterminateOnly">false</item><item name="android:progressDrawable">@android:drawable/progress_horizontal</item><item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item><item name="android:minHeight">20dip</item><item name="android:maxHeight">20dip</item><item name="android:mirrorForRtl">true</item></style>

有没有注意到,这里还有minHeight,maxHeight这两个属性,尝试改动了一下达到效果。好了到这里设置进度条进度大小的属性就说完了。一个GUI的效果图会给出控件多大,里面进度和和控件边沿之间的间隙是多大。我们能够直接在layout_width这样的属性中设置控件大小,在android:maxHeight里面设置进度的大小。
        GUI除了会要求设定进度的大小,还会要求改变进度本身的大小比方图片或者角度。是的,GUI什么的不会轻易放过程序猿的。有没有注意到,上面的源代码有个这种定义

<item name="android:progressDrawable">@android:drawable/progress_horizontal</item>

推測突破口就是这里,查看了一下google的定义貌似非常复杂的样子。原来就里面的那个进度,其背景颜色还要分为:1.单独的背景颜色;2.进度的背景颜色;3.第二进度的背景颜色。并且全部的颜色值,转角大小都是用代码给写出来的,着实是复杂。这里直接就告诉大家吧,通过我们的研究以及其它项目组充满血泪的经验总结,在这里直接用GUI画的图是最方便的。一般自己定义的进度条背景色,终于实现出来的代码都是以下的格式

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@android:id/background" android:drawable="@drawable/******" /><item android:id="@android:id/progress" android:drawable="@drawable/*******" />
</layer-list> 

看到这里是不是感觉人生充满了欢乐。
        最后在给进度条加上百分比,原以为android会提供这个属性,查了半天真的木有。最后我们想到了两种实现方法,貌似都还不错。先说说第一个方法的思路,继承progress控件通过控件绘图回调方法onDraw(Canvas),在画出一个百分比出来。关于第二个方法,也是新定一个控件,用framelayout封装一个progressbar,一个textview。就个人来说比較倾向第一种方法,这个貌似能逐步加深对android一些理解,对于第二个方法呢,在各个平台上具有通用性,也不错。直接给出第一个方法的实现:

package com.example.android.apis;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.text.TextPaint;
import android.widget.ProgressBar;public class PercentProgressbar extends ProgressBar {String text;Paint mTextPaint;public PercentProgressbar(Context context) {super(context);initText();}@Overridepublic synchronized void setProgress(int progress) {super.setProgress(progress);setText(progress);}@Overrideprotected synchronized void onDraw(Canvas canvas) {super.onDraw(canvas);Rect rect = new Rect();this.mTextPaint.getTextBounds(this.text, 0, this.text.length(), rect);int x = (getWidth() / 2) - rect.centerX();int y = (getHeight() / 2) - rect.centerY();canvas.drawText(this.text, x, y, this.mTextPaint);}private void initText() {this.mTextPaint = new TextPaint();this.mTextPaint.setColor(Color.WHITE);//还能够设置字体的其它属性}private void setText(int progress){int i = (progress * 100)/this.getMax();this.text = String.valueOf(i) + "%";}
}

这里也參考了一下网上的实现,只是发现网络上大多数使用的画笔都是paint,建议大家还是使用textpaint。否则进度条里面的文字和界面其它地方的文字总是有些不一样的地方,GUI不会放过你们的。。。在强调一点,进度条里面的百分比,是不应该随着系统字体大小变化而变化的,所以设置字体的时候请记得使用DP做为单位。在上面的第二个方法里面直接在textview控件里面设置字体大小就能够了,那么在第一种方法里面应该怎么设置字体大小呢,这里就留给大家思考把。
        总结一下,文章解说的是progressbar,只是并木有介绍怎么使用progressbar显示运行进度什么的。类似这样的最基础的知识,能够看下google的APIDemo。这里解说了progressbar设置内部进度大小,设置内部进度图片,怎么显示百分比。相信关于progressbar最常见的,可是Demo里面没有提到的,都在这里了。

转载于:https://www.cnblogs.com/blfshiye/p/4056422.html

progressbar使用方法:进度画面大小,进度画面背景,进度百分比相关推荐

  1. 视频画面有黑边怎么办?三招视频画面大小裁剪的方法教给你

    大家在做视频剪辑时会不会遇到这样的情况,从网上下载视频画面太大,有时候还带有黑边,影响了视频主体的呈现效果,剪出来的视频也没有达到想要的效果. 因此这时候我们可以适当地将视频画面大小裁剪一下,去除视频 ...

  2. TIA博途中更换HMI面板后,自动调整画面大小的具体方法

    TIA博途中更换HMI面板后,自动调整画面大小的具体方法 当由于项目升级或程序移植,需要更换HMI面板时,如果HMI面板的尺寸发生了变化,可能会导致画面上的元件和文字等显示不对,下面和大家介绍具体的处 ...

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

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

  4. java 进度条 不更新_java 进度条不能刷新解决方案 (已更新一次)

    java期末考试都考完了,实验课却还没完,课程设计也还没开始做,本来打算把最后两次实验尽快做完,然后好好做课设,(我早就想写的坦克大战,过几天写好了,也肯定要整理发布出来).可却被多线程一题给坑了,题 ...

  5. Vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果

    vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果 需求分析: 类似于大多数音乐播放器中等mini播放器控制按钮,显示播放进度,实时更新进度. progress-cir ...

  6. python图形化进度条代码_Python实现进度条和时间预估的示例代码

    一.前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我 ...

  7. php在命令行下显示进度条,PHP命令行进度条

    方法:/** * PHP命令行执行php文件的时候显示执行进度条 * 调用方法:cmd_progress_bar(100,2);表示进度为2%; * @param $total 总进度数量 * @pa ...

  8. 不知道视频画面大小裁剪怎么操作?1分钟教你学会裁剪大小

    有时候我们在网上下载下来的视频,尺寸不合适,空白的画面太多,这时候我们将视频画面大小进行适当的裁剪就可以啦.那你们知道视频画面大小裁剪怎么操作吗?下面我就来教大家2个方法完成视频画面裁剪! 操作方法分 ...

  9. Android缓冲进度条或加载进度条

    缓冲进度条或加载进度条,在加载页面或者视频加载过程中,为了做到更好的UI及App功能体验交互,这些缓冲加载的等待效果是必不可少的: 下面来看一下旋转的动画效果: 那么,他们的具体源码在这里:loadi ...

最新文章

  1. AI正从“感知智能”走向“认知智能”
  2. 手机编程micropython_MicroPython可视化拼插编辑器:让硬件编程更智能!
  3. 【转】Linux系统编程---dup和dup2详解
  4. 软件测试python基础_软件测试学习教程——python基础
  5. Js+Css 控制iframe内容自动缩放
  6. redis主从复制_技术干货分享:一文了解Redis主从复制
  7. sql查看表的数据大小_查看Oracle 数据库的每天归档量及数据库大小
  8. android全系统动态二进制分析--CopperDroid
  9. ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services
  10. Python实现IP地址归属地查询
  11. linux上mysql命令无效_linux下mysql命令没用
  12. 《Linux系统最佳实践工具:命令行技术》新书抢先看
  13. c#winform利用opencvsharp的Floodfill实现类似PS魔棒功能
  14. wsl2 + ubuntu安装下载和一些安装推荐
  15. jQuery Text-to-Speech 谷歌在线语音
  16. android个人理财通项目_基于Android个人理财系统设计与实现.doc
  17. python e指数函数,常用的e指数代码
  18. 有效的回旋镖(2022-6-8)每日一练
  19. 南师大计算机专业导师,南京师范大学硕士生导师名单
  20. 【NOIP校内模拟】图论题

热门文章

  1. 同时买票是怎么实现的_搞笑GIF段子:这位挖掘机司机真的很牛,同时胆子很大...
  2. python列表内元素求和_Python之list对应元素求和
  3. Bellman_Ford边上权值为任意值的单源最短路径问题(+路径打印)边集合与邻接表两种实现
  4. token详解及常见防范措施
  5. Codeforces Round #518 (Div. 2): F. Knights(神题)
  6. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)
  7. bzoj 4300: 绝世好题
  8. HDU 2089:不要62(数位DP)
  9. 非华为电脑配对华为手机(RMB+5899¥)
  10. c#图像处理-图像预览全解