Android中有两种显示进度条的方式:ProgressBar与ProgressDialog。
public class ProgressBar extends View {...}
public class ProgressDialog extends AlertDialog {...}
public class AlertDialog extends Dialog implements DialogInterface {...}
public class Dialog implements DialogInterface, Callback, android.view.KeyEvent.Callback, OnCreateContextMenuListener {...}
比较:
ProgressDialog是动态显示出来 并且遮挡住Activity 此时不能进行交互。
而ProgressBar是静态显示在布局中的 加载过程中 同时可以与Activity进行交互
ProgressDialog进度条对话框是在加载数据的时候,弹出的一个对话框,会将部分Activity遮住。
ProgressBar进度条是在页面中嵌入的一个组件,不是弹出的层
ProgessBar 进度条
使用XML配置,自定义ProgressBar 样式 和大小宽度
在ui控件中设置progressbar
默认是圆圈类型
制定ProgressBar的显示风格——ProgressBar的style属性(默认是中环形进度条)
style="?android:attr/progressBarStyleLarge"
//大环形进度条
style="?android:attr/progressBarStyleSmall"
//小环形进度条
style="?android:attr/progressBarStyleHorizontal"
//水平进度条
ProgressBar的分类
- 可以精确显示进度(百分比等刻度)
2.不可以精确显示进度(一直转啊转,类似一个过场动画)
标题上ProgressBar的设置
在onCreate()中
//启用窗口特征,启用带进度条和不带进度的进度条
requestWindowFeature(Window.FEATURE_PROGRESS);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
//显示两种进图条
setProgressBarVisibility(true);
setProgressBarIndeterminateVisibility(true);
setProgress(9999); //Max=10000
ProgressBar关键属性(最大显示进度、第一显示进度、第二显示进度)
android:max="100" 最大显示进度
android:progress="50" 第一显示进度
android:secondaryProgress="80" 第二显示进度
android:indeterminate="true" 设置是否精确显示 true-不精确显示进度
ProgressBar关键方法
1.setProgress(int)
2.setSecondaryProgress(int)
3.getProgress();
4.getSecondaryProgress();
5.incrementProgressBy(int) 增加或减少第一进度
6.incrementSecondaryProgressBy(int) 增加或减少第二进度
7.getMax() 获取最大进度
在doInbackground方法中定义
sumLength=entity.getContentLength()
while(len=inputStream.read(b)){
curLength+=len
publishProgress(sumLength,curLength);
}
在onProgressUpdate(Integer… values)中进行进度条更新
progressBar.setMAX(values[0]);
progressBar.setProgress(values[1]);
//此处的textView可以通过构造方法传过来
textview.setText(values[1]+"/"+values[0]);
ProgressBar 的基本属性和方法
xml基本属性
android:progressBarStyle//:默认进度条样式
android:progressBarStyleHorizontal//:水平样式
//重要方法
getMax()//:返回这个进度条的范围的上限
getProgress()//:返回进度
getSecondaryProgress()//:返回次要进度
incrementProgressBy(int diff)//:指定增加的进度
isIndeterminate()//:指示进度条是否在不确定模式下
setIndeterminate(boolean indeterminate)//:设置不确定模式下
setVisibility(int v)//:设置该进度条是否可视
//重要事件
onSizeChanged(int w, int h, int oldw, int oldh)//:当进度值改变时引发此事件
ProgressDialog
使用时必须新建ProgressDialog对象,在运行时会弹出“对话框”作为提醒,此时应用程序后台失去焦点(即此时无法对UI组件进行操作),直到进程结束后,才会将控制权交给应用程序。
//进度条对话框
ProgressDialog pd=new ProgressDialog(this);
//在异步构造方法中
pd.setTitle("");
pd.setMessage("");
pd.setIcon(R.drawable.xxx);
pd.setMax(100);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setCancelable(true);//是否可以用退回键清除进度对话框
在onPreExecute()方法中显示对话框
pd.show();
在doInbackground方法中
int sumLength=inputStream.avaiable();
int curLength=0;
int len=0;
while((len=inputStream.read(b))!=-1){
curLength+=len;
int progress=curLength*100/sumLength;
publishProgress(progress);
}
在onpostExecute()方法中 关闭对话框
pd.dimiss();
ProgressDialog 可以在相应的Activity中配置 它的基本的样式,例如一下基本方法:
ProgressDialog mProgressDialog = new ProgressDialog(TestProgerssDialogActivity.this);
// 设置mProgressDialog风格
mProgressDialog.setProgress(ProgressDialog.STYLE_SPINNER);//圆形
mProgressDialog.setProgress(ProgressDialog.STYLE_HORIZONTAL);//水平
// 设置mProgressDialog标题
mProgressDialog.setTitle("提示");
// 设置mProgressDialog提示
mProgressDialog.setMessage("这是一个圆形进度条对话框");
// 设置mProgressDialog进度条的图标
mProgressDialog.setIcon(R.drawable.flag);
// 设置mProgressDialog的进度条是否不明确
//不滚动时,当前值在最小和最大值之间移动,一般在进行一些无法确定操作时间的任务时作为提示,明确时就是根据你的进度可以设置现在的进度值
mProgressDialog.setIndeterminate(false);
//mProgressDialog.setProgress(m_count++);
// 是否可以按回退键取消
mProgressDialog.setCancelable(true);
// 设置mProgressDialog的一个Button
mProgressDialog.setButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.cancel();
}
});
// 显示
mProgressDialogmProgressDialog.show();
参考:
ProgressDialog 和 ProgressBar 个人使用
Android–ProgressBar(进度条)、ProgressDialog(进度条对话框)
圆形progressbar设计样式
参考:【Android进度条】三种方式实现自定义圆形进度条ProgressBar
使用方式相同:
android:indeterminateDrawable=”@drawable/progressbar3”
<ProgressBar
style="?android:attr/progressBarStyleSmall"
android:layout_width="30dp"
android:layout_height="30dp"
android:indeterminateDrawable="@drawable/progressbar3" />
1、帧动画
<?xml version="1.0" encoding="UTF-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item
android:drawable="@drawable/refresh1"
android:duration="150" />
<item
android:drawable="@drawable/refresh5"
android:duration="150" />
<item
android:drawable="@drawable/refresh10"
android:duration="150" />
<item
android:drawable="@drawable/refresh15"
android:duration="150" />
<item
android:drawable="@drawable/refresh20"
android:duration="150" />
<item
android:drawable="@drawable/refresh25"
android:duration="150" />
<item
android:drawable="@drawable/refresh30"
android:duration="150" />
</animation-list>
2、旋转渐变色圆圈
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360">
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="8"
android:useLevel="false">
<gradient
android:centerColor="#FFFFFF"
android:centerY="0.50"
android:endColor="#1E90FF"
android:startColor="#000000"
android:type="sweep"
android:useLevel="false" />
</shape>
</rotate>
3、旋转任意图片
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_launcher"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />