概述

在这里插入图片描述

如上图所示,这个就是三种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();
                
            }
        });
 
 

在这里插入图片描述 在这里插入图片描述