概述
如上图所示,这个就是三种ProgressBar就是进度加载的过程,没有明确目的的就一直在转,有明确目标的是进度条。
如上图所示,这个是ProgressDialog,一个对话框显示正在加载一个圈在转,提示正在加载,这是一种ProgressDialog。
如上图所示,另一种是显示下载进度的,这里面其实进度条,这可是使用在许多场景下,下面还可以设置一些Button。
演示
1、一个默认的ProgressBar
android:orientation="vertical"
<ProgressBar
android:id="@+id/pd1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
2、ProgressBar的style有很多种
<ProgressBar
android:id="@+id/pd2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar"
/>
3、转圈是无状态的,不知道加载到什么时候,一直在转;进度条是有明确状态的,总长度是父类控件,style是水平状态,最大值是100,一级进度是10,二级进度30
<ProgressBar
android:id="@+id/pd3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:max="100"
android:progress="10"
android:secondaryProgress="30"
/>
4、之前的样式都是老样式4.0之前的样式,其他属性都是一样的,只是换了一下style,这个style也可以自己定义
<ProgressBar
android:id="@+id/pd4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.Material.ProgressBar.Horizontal"
android:max="100"
android:progress="10"
android:secondaryProgress="30"
/>
5、模拟进度条加载,使用pd3,比较明显,加载到30 activity_main.xml:
<ProgressBar
android:id="@+id/pd3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"//android是系统自带的效果
android:max="100"
android:progress="10"
android:secondaryProgress="30"
/>
HelloAndroidActivity.java:
private ProgressBar mpd3;
mpd3 = (ProgressBar)findViewById(R.id.pd3);
mpd3.setProgress(30);//加载到30
6、添加一个按钮,点击这个按钮进度条开始加载到100,在pd3上做修改,将二级进度删除 activity_main.xml:
<ProgressBar
android:id="@+id/pd4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.Material.ProgressBar.Horizontal"
android:max="100"
android:progress="10"
/>
<Button
android:id="@+id/btn_start"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="模拟进度"/>
HelloAndroidActivity.java:
package com.kinginsai.template.android;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
public class HelloAndroidActivity extends Activity {
private ProgressBar mpd3;
private Button mbtnstart;
/**
* Called when the activity is first created.
*
* @param savedInstanceState
* If the activity is being re-initialized after
* previously being shut down then this Bundle contains the data it most
* recently supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it is null.</b>
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mpd3 = (ProgressBar)findViewById(R.id.pd3);
mbtnstart = (Button)findViewById(R.id.btn_start);
mbtnstart.setOnClickListener(new View.OnClickListener() {//设置点击事件
@Override
public void onClick(View v) {
handler.sendEmptyMessage(0);//发送一个空消息到Handler
}
});
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mpd3.getProgress() < 100) {//ProgressBar当前进度如果小于100
handler.postDelayed(runnable, 500);//小于100的时候发送一个消息,延迟500毫秒发送消息,发送之后就执行runnable
} else {
Toast.makeText(HelloAndroidActivity.this,"加载完成", Toast.LENGTH_LONG).show();//其他就弹出Toast,显示加载完成
}
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {
mpd3.setProgress(mpd3.getProgress()+5);//Progress加5
handler.sendEmptyMessage(0);//送空消息回去到Handler
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(com.kinginsai.template.android.R.menu.main, menu);
return true;
}
}
7、自定义转圈效果,先将图片上传到drawable-xxhdpi,使图片转起来,实现这个的方法有很多种,我们只将下如何使用ProgressBar使图片转起来,先在drawable创建一个bg_progressbar.xml存放效果,通过indeterminateDrawable属性完成
activity_main.xml:
<ProgressBar
android:id="@+id/pd5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar"
android:indeterminateDrawable="@drawable/bg_progressbar"
/>
bg_progressbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/progressbar"
android:pivotX="50%"//在x轴的50%为中心点转
android:pivotY="50%"//在y轴的50%为中心点转
>
</animated-rotate>
8、也可以不通过indeterminateDrawable属性,通过style完成,不止ProgressBar组件可以通过style修改自定义效果,其他组件在自定义效果的时候也可以,打开style.xml
activity_main.xml:
<ProgressBar
android:id="@+id/pd5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/MyProgressBar"
/>
style.xml:
<style name="MyProgressBar">
<item name="android:indeterminateDrawable">@drawable/bg_progressbar</item>
</style>
9、演示progressdialog,添加一个按钮组件,点击按钮之后触发progressdialog,添加一个人为中断progressdialog事件,显示cancel activity_main.xml:
<Button
android:id="@+id/btn_progress_dialog1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="ProgressDialog1"
android:textAllCaps="false"/>
HelloAndroidActivity.java:
private Button mbtnpd1;
mbtnpd1 = (Button)findViewById(R.id.btn_progress_dialog1);
mbtnpd1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ProgressDialog progressdialog = new ProgressDialog(HelloAndroidActivity.this);
progressdialog.setTitle("提示");
progressdialog.setMessage("正在加载");
progressdialog.setOnCancelListener(new DialogInterface.OnCancelListener(){//人为返回事件监听
@Override
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
Toast.makeText(HelloAndroidActivity.this, "cancel...", Toast.LENGTH_LONG).show();
}
});
progressdialog.show();
}
});
10、之前是点击其他区域是可以隐藏或者取消progressdialog,添加setCancelable属性就禁止返回,必须等待加载完成之后才可以继续操作
progressdialog.setCancelable(false);
11、演示进度条类型的progressdialog,添加一个button按钮,使用setProgressStyle属性更改为进度条形式,默认max为100,可以自定义设置 activity_main.xml:
<Button
android:id="@+id/btn_progress_dialog2"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="ProgressDialog2"
android:textAllCaps="false"/>
HelloAndroidActivity.java:
private Button mbtnpd2;
mbtnpd2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ProgressDialog progressdialog = new ProgressDialog(HelloAndroidActivity.this);
progressdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressdialog.setTitle("提示");
progressdialog.setMessage("正在下载...");
progressdialog.show();
}
});