一、前提
ProgressBar和ProgressDialog都是常用的加载组件,用来加载进度,下载进度
二、目标
ProgressBar、ProgressDialog
三、内容
1、首先是最常见的ProgressBar,只用在xml文件下添加即可
<ProgressBar
android:id="@+id/pb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
2、换一种样式
<ProgressBar
android:id="@+id/pb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar"
/>
3、水平进度条样式
<ProgressBar
android:id="@+id/pb3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.Material.ProgressBar.Horizontal"
android:padding="10dp"
android:max="100"
android:progress="15"
android:secondaryProgress="50"
/>
max表示最大值,progress表示当前值,secondaryProgress表示二次进度,意思就是此进度条最大值为100,现在规定运行到15,二次进度到50,我们在看电影时都会有观看进度,和加载进度,观看进度就相当于当前值,缓存进度就相当于二次进度
4、运行进度条
<ProgressBar
android:id="@+id/pb4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_marginTop="10dp"
android:padding="10dp"
android:max="100"
android:progress="15"
/>
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="start"
android:layout_marginTop="20dp"
/>
在MainActivity中添加
package com.example.sunny.progress;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ProgressBar;
import java.util.logging.LogRecord;
public class MainActivity extends AppCompatActivity {
private ProgressBar pb4;
private Button button1,button2,button3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pb4= (ProgressBar) findViewById(R.id.pb4);
button1= (Button) findViewById(R.id.btn1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(0);
}
});
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(pb4.getProgress()<100){
handler.postDelayed(runnable,500);//延迟500毫秒
}else{
ToastUtil.showMsg(MainActivity.this,"succeed");
}
}
};
Runnable runnable= new Runnable(){
@Override
public void run() {
pb4.setProgress(pb4.getProgress()+5);
handler.sendEmptyMessage(0);
}
};
}
其中Handler为消息处理机制,这个以后学习到了在进行深入了解,大致的意思是通过消息处理机制来判断该进度条的的运行,当进度小于100时,每次加5且延迟500毫秒直到加载完成
5、自定义ProgressBar
<ProgressBar
android:id="@+id/pb5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/progress"
/>
在progress.xml目录下
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/ic_launcher"
android:pivotX="50%"
android:pivotY="50%">
<!-- 确定旋转中心 -->
</animated-rotate>
animated-rotate是一种简单的加载动画方式,其中的pivotX和pivotY是动画相对于图像的位置
6、ProgressDialog
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="click"
android:textAllCaps="false"
android:layout_marginTop="20dp"
/>
<Button
android:id="@+id/btn3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="click"
android:textAllCaps="false"
android:layout_marginTop="20dp"
/>
在MainActivity中添加
button2= (Button) findViewById(R.id.btn2);
button3= (Button) findViewById(R.id.btn3);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setTitle("提示");
progressDialog.setMessage("正在加载");
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
ToastUtil.showMsg(MainActivity.this, "cancel");
}
});
//progressDialog.setCancelable(false);//不可强制被取消,点其他地方不可取消
progressDialog.show();
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressDialog p=new ProgressDialog(MainActivity.this);
p.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//变成进度条样式
p.setTitle("提示");
p.setMessage("正在加载");
p.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//
}
});
p.show();
}
});
其实与AlertDialog添加的代码差不多,都可以设置标题,内容,按钮以及点击事件,只是在这里可以改变进度条的样式
四、总结
都是常见控件,会持续更新