Android Studio开发学习(九)——ProgressBar、ProgressDialog

一、前提

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添加的代码差不多,都可以设置标题,内容,按钮以及点击事件,只是在这里可以改变进度条的样式

四、总结

都是常见控件,会持续更新

原创文章 30 获赞 5 访问量 1901

猜你喜欢

转载自blog.csdn.net/qq_41890177/article/details/105668853