Android ProgressBar进度条使用详解

ProgressBar进度条,分为旋转进度条和水平进度条,进度条的样式根据需要自定义,之前一直不明白进度条如何在实际项目中使用,网上演示进度条的案例大多都是通过Button点击增加、减少进度值,使用方法incrementProgressBy(int),最简单的做法是在xml布局文件中放置ProgressBar空间,然后再MainActivity中触发事件后执行incrementProgressBy(int),代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.teachcourse.www.MainActivity"
android:orientation="vertical"
android:gravity="center"
android:id="@+id/onclick_ll" >
<!--点击LinearLayout控件,改变ProgressBar进度-->
<ProgressBar
android:id="@+id/progressBar_horizontal"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="15dp"
android:layout_marginTop="28dp"/>

</LinearLayout>

在Java代码中非常的简单,如下图:

public class MainActivity extends ActionBarActivity implements View.OnClickListener{
private ProgressBar pb_large;
private ProgressBar pb_normal;
private ProgressBar pb_small;
private ProgressBar pb_horizontal;
private int readed;
private int progressValue;

private LinearLayout onclick_ll;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();

Drawable drawable = getResources().getDrawable(
R.drawable.progress_bar_states);

pb_horizontal.setProgressDrawable(drawable);//设置水平滚动条的样式

pb_horizontal.setMax(100);//设置进度条的最大值
onclick_ll.setOnClickListener(this);//LinearLayout添加监视器
}

private void initView() {
pb_horizontal = (ProgressBar) findViewById(R.id.progressBar_horizontal);
onclick_ll=(LinearLayout)findViewById(R.id.onclick_ll);
}

@Override
public void onClick(View v) {
pb_horizontal.incrementProgressBy(5);
if(pb_horizontal.getProgress()==pb_horizontal.getMax()){
Toast.makeText(this, "进度条已经达到最大值,进度条消失", Toast.LENGTH_LONG).show();
pb_horizontal.setProgress(0); //当达到最大之后,进度值归0
}
}
}

我们这里展示的是ProgressBar读取文件字节流后,展示的读取进度条,上面的简单演示就不说了。

效果图:ProgressBar读取文件字节流演示

这里展示文件读取字节流过程中,ProgressBar进度变化情况,当读取完成,进度条刚好满,这在我们实际项目开发中,经常需要使用到,如何成为我写这篇文章的原因。
布局文件progress_horizontal_read_data.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.teachcourse.www.MainActivity"
android:orientation="vertical"
android:gravity="center" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/read_data_tv"
android:text="@string/read_info"
android:scrollbars="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:lineSpacingExtra="10dp"/>

<ProgressBar
android:id="@+id/progressBar_horizontal_read_data"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="15dp"
android:layout_marginTop="28dp"/>

</LinearLayout>

Java代码ProgressBarActivity.java

public class ProgressBarActivity extends ActionBarActivity {
private ProgressBar pb_horizontal;
private int readed;
private int progressValue;
private TextView mReadProgress_TV;
private String mData;
private StringBuffer sb;//每次读取到的字节数据存储
int length;//标记文件大小
private Thread thread;//读取文件线程
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progress_horizontal_read_data);
initView();

Drawable drawable = getResources().getDrawable(
R.drawable.progress_bar_states);
String path = Environment.getExternalStorageDirectory()
+ "/ProgressMonitor.txt";// ProgressMonitor.txt是我存到sdcard中的一个文件,可以自定义文件名大小位置
final File file = new File(path);

if(file.exists()){
length=(int) file.length();
pb_horizontal.setMax(length);//设置进度条最大值
pb_horizontal.setProgressDrawable(drawable);//自定义进度条样式
}
//启动一个线程读取文件内容
thread=new Thread() {

@Override
public void run() {
readFromFile(file.getAbsolutePath());
}

};
thread.start();

}

Handler handler = new Handler() {

@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 110:
progressValue += msg.arg1;
pb_horizontal.setProgress(progressValue);
mReadProgress_TV.setText(sb.toString());
if(progressValue==length){
Toast.makeText(ProgressBarActivity.this, "文件读取完成", Toast.LENGTH_LONG).show();
}
Log.d("progressValue-------------->", progressValue + "");
break;

}
}

};

public void readFromFile(String path) {
FileInputStream fis;
try {
fis = new FileInputStream(path);
DataInputStream dis = new DataInputStream(fis);
sb=new StringBuffer();
byte b[] = new byte[10];// 每次读取1字节
while ((readed = dis.read(b)) != -1) {
Message msg = new Message();
msg.arg1 = readed;
msg.what = 110;
mData=new String(b,0,readed);
sb.append(mData);
handler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

dis.close();
fis.close();
} catch (Exception e) {

e.printStackTrace();
}

}

private void initView() {
pb_horizontal = (ProgressBar) findViewById(R.id.progressBar_horizontal_read_data);
mReadProgress_TV=(TextView)findViewById(R.id.read_data_tv);
}

}

这里使用Handler消息处理,每次读取到数据后更新进度条,将读取的字节数据放置在arg1中,在Handler的handleMessage方法中设置进度值,同时刷新TextView显示的内容,这里难就难在如何获取每次读取的字节数,然后刷新进度条,在字节流的学习中,我们可以自定义每次读取字节大小,File类中可以获取到文件的总大小,最终我们得到上面图片中的效果。在这个例子里面,我们可以将读取手机卡的文件,换成下载文件,传输文件同样适应。

以上就是本文的全部内容,希望大家对Android软件编程有所帮助。

时间: 2016-02-12

Android studio圆形进度条 百分数跟随变化

本文实例为大家分享了Android studio圆形进度条展示的具体代码,供大家参考,具体内容如下 MainActivity import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity impl

Android 七种进度条的样式

当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行.执行进度如何.应用程序是否遇到错误终止等,这时需要使用进度条来提示用户后台程序执行的进度.Android系统提供了两大类进度条样式,长形进度条(progress-BarStyleHorizontal) 和圆形进度条(progressBarStyleLarge).进度条用处很多,比如,应用程序装载资源和网络连接时,可以提示用户稍等,这一类进度条只是代表应用程序中某一部分的执行情况,而整个应用程序执行情况呢,则可以通

Android文件下载进度条的实现代码

main.xml: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_paren

Android中实现Webview顶部带进度条的方法

写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面. 示例图如下: 主Activity代码: 复制代码 代码如下: package com.droidyue.demo.webviewprogressbar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.vi

Android中自定义进度条详解

Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子 很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如: ok,我们开始吧: 一)变换前背景 先来看看progressbar的属性: 复制代码 代码如下: <ProgressBar             android:id="@+id/progressBar"             style="?android:attr/progressBarStyleHor

Android三种方式实现ProgressBar自定义圆形进度条

进度条样式在项目中经常可以见到,下面小编给大家分享Android三种方式实现ProgressBar自定义圆形进度条. Android进度条有4种风格可以使用. 默认值是progressBarStyle. 设置成progressBarStyleSmall后,图标变小. 设置成progressBarStyleLarge后,图标变大 设置成progressBarStyleHorizontal后,变成横向长方形. 自定义圆形进度条ProgressBar的一般有三种方式: 一.通过动画实现 定义res/a

实例详解Android自定义ProgressDialog进度条对话框的实现

Android SDK已经提供有进度条组件ProgressDialog组件,但用的时候我们会发现可能风格与我们应用的整体风格不太搭配,而且ProgressDialog的可定制行也不太强,这时就需要我们自定义实现一个ProgressDialog. 通过看源码我们发现,ProgressDialog继承自Alertdialog,有一个ProgressBar和两个TextView组成的,通过对ProgressDialog的源码进行改进就可以实现一个自定义的ProgressDialog. 1.效果: 首先

android ListView和ProgressBar(进度条控件)的使用方法

ListView控件的使用:ListView控件里面装的是一行一行的数据,一行中可能有多列,选中一行,则该行的几列都被选中,同时可以触发一个事件,这种控件在平时还是用得很多的.使用ListView时主要是要设置一个适配器,适配器主要是用来放置一些数据.使用起来稍微有些复杂,这里用的是android自带的SimpleAdapter,形式如下:android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<

android自定义进度条渐变色View的实例代码

最近在公司,项目不是很忙了,偶尔看见一个兄台在CSDN求助,帮忙要一个自定义的渐变色进度条,我当时看了一下进度条,感觉挺漂亮的,就尝试的去自定义view实现了一个,废话不说,先上图吧! 这个自定义的view,完全脱离了android自带的ProgressView,并且没使用一张图片,这样就能更好的降低程序代码上的耦合性! 下面我贴出代码  ,大概讲解一下实现思路吧! 复制代码 代码如下: package com.spring.progressview; import android.conten

Android ProgressBar进度条和ProgressDialog进度框的展示DEMO

在做手机开发时,经常碰到一些比较耗时的操作,这个时候进度条就开始派上用场了.这个demo展示了ProgressBar进度条和ProgressDialog进度框.一.ProgressDialog进度框,效果如图所示:代码如下: 复制代码 代码如下: //进度对话框按钮监听     class ProssButtonListener implements OnClickListener {         @Override         public void onClick(View v) {

Android自定义水平进度条的圆角进度

平时项目中经常用到自定义进度条样式,我们一般实现的也是下面的第一种,至于第二种的圆角进度,网上介绍的资料也不是很多,这里一起展示一下这两种的实现. 下面开始看代码,先从主界面布局开始看起: <ProgressBar style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="20dp&qu

android多线程断点下载-带进度条和百分比进度显示效果

android多线程断点下载,带进度条和百分比显示,断点下载的临时数据保存到SD卡的文本文档中,建议可以保存到本地数据库中,这样可以提高存取效率,从而提高系统性能. 效果: 打开软件: 下载中: 下载完毕: 附代码如下: package com.yy.multiDownloadOfBreakPoint; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.R

JS中实现一个下载进度条及播放进度条的代码

术上没太大难度,有难度的地方是怎么让整个动画比较流畅.一个主要问题是动画的滞后性:当下载进度到某个点的时候,你再用250ms的动画过渡过去,这个时候已经慢了,所以很多人可能因为这个原因或者嫌麻烦,直接就不做动画了,在进度事件触发的时候直接更新进度条相应的位置,不过我们可以尝试实现一下. 最后做出来的效果如下图所示: 小狗奔跑的动画是一个lottie动画,来自 codepen . 1. 获取下载进度 ajax里面可以拿到下载进度,如下代码所示: let xhr = new XMLHttpReque

python实现文本进度条 程序进度条 加载进度条 单行刷新功能

python实现文本进度条 程序进度条 加载进度条 单行刷新功能,具体内容如下所示: 利用time库来替代某个程序 的进行过程,做实例, 思路是,简单打印出来程序进度 单行刷新关键是\r, python默认是print后换行,所以加一个\r是光标回退到之前位置 import time tm=10 print('{:-^18}'.format('开始')) for i in range(tm+1): a='#'*i b='.'*(tm-i) c=(i/tm)*100 print('\r{:^3.0

java实现在复制文件时使用进度条(java实现进度条)

思路分析: 因为既要有操作面板又要有进度条,所以肯定要出现两个继承JFrame类的窗体.先看被调用的进度条窗体,它不需要手动操作,所以类的内部实现一个方法就可以了.因为设计文件操作,所以要捕获异常.首先根据要复制的文件创建File对象,以及根据复制后文件的保存地址创建File对象,然后创建FileOutputStream对象,再创建FileInputStream对象,之后是ProgressMonitorInputStream对象,然后读取文件,如果总耗时超过2秒,将会自动弹出一个进度监视窗口.接

Android UI控件之ProgressBar进度条

我们知道在所有的界面UI中进度条无疑是非常重要的一个,因为它可以给用户一个较为清晰的视觉效果:就是用户的操作的完成情况.这不是简单的完成与未完成,而是以一个进度的方式展示给用户的交互性更强了. 对于Android系统中的进度条如何使用呢?下一是简单的实现,并未做相关的美化处理. 依照惯例,先上效果图: 第一张: 第二张: 其中两个原型的进度条并未做任何的处理,水平进度条利用线程使之不停地增加减少. 具体实现首先看布局文件: <LinearLayout xmlns:android="http

Android横向进度条演示效果

进度条:相信大家也都明白,有了进度条,那么给用户就不会造成,长时间的等待而觉得自己的程序挂掉了,所以,这个小demo还是可一看看的,那么接下来,然我们来看看到底是如何实现的. 1.效果图: 2.布局说明: 1.textview显示进度条 2.ProgressBar进度条 3.进度条配置: <ProgressBar android:id="@+id/pb" style="@android:style/Widget.ProgressBar.Horizontal"

进度条ProgressBar及ProgressDialog(实例)

废话不多说,直接上代码 Main代码 package processdemo.example.administrator.processbardemo; import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AppCompatActivi