欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实现简单的进度条

程序员文章站 2024-02-03 15:28:04
...

实现简单的进度条

前言

使用进度条提示程序使用进度。
当在布局文件中添加进度条时,代码如下:

<ProgressBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

运行结果如下:
实现简单的进度条
我们可以知道,如果不加设置,默认的结果就会这样。
接下来,通过更改style属性,设置进度条样式。主要分为两种方法:
1.通过主题属性进行设置
2.通过定义好的样式资源设置
演示:

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    android:max="100"
    android:progress="50"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

实现简单的进度条

实例

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="0dp"
    android:background="@mipmap/im0514"
    tools:context=".MainActivity">
<ProgressBar
    style="@android:style/Widget.ProgressBar.Horizontal"
    android:max="100"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="10dp"/>
</RelativeLayout>

activity如下:

package com.example.cloudread;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.WindowManager;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends Activity{
    private ProgressBar progressBar;//定义进度条对象,不对她进行实例化
    private int mProgress=0;//整形变量,记录完成进度
    private Handler mHandler;//定义处理消息的handle对象,不初始化
    // 都声明为私有
    @Override
    protected void onCreate(Bundle savedInstanceState) {//在该方法中获得进度条对象
        super.onCreate(savedInstanceState);
        setContentView(R.layout.friend);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
        progressBar=(ProgressBar)findViewById(R.id.progressBar);//获取进度条对象
        mHandler=new Handler(){// 实例化处理消息的Handle类,通过它,我们可以通过发送消息来更新UI组件
            @Override
            public void handleMessage(Message msg) {
                //判断耗时操作是否完成。如果没有完成,更新进度,否则,设置进度条不显示
                if(msg.what==0x111){
                    progressBar.setProgress(mProgress);//设置进度条更新
                }else{
                    Toast.makeText(MainActivity.this,"耗时操作已完成",Toast.LENGTH_SHORT).show();
                    progressBar.setVisibility(View.GONE);//设置进度条不显示
                }
            }
        };
        new Thread(new Runnable() {//模拟耗时操作
            @Override
            public void run() {
                while (true){//实时获取耗时操作完成的百分比,直到耗时操作的结束
                    mProgress=doWork();// 该方法的返回值,就是完成的进度
                    Message m=new Message();//创建并实例化消息对象,用于更新进度条进度
                    if(mProgress<100){//判断当前进度是否完成
                        m.what=0x111;//自定义消息代码,通过她可以区分消息,以便进行不同的处理
                        mHandler.sendMessage(m);//发送消息
                    }else{
                        m.what=0x110;//表示耗时操作已完成
                        mHandler.sendMessage(m);
                        break;
                    }
                }
            }
            private int doWork(){//编写doWork方法
                mProgress+=Math.random()*10;//改变完成进度
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return mProgress;
            }
        }).start();//开启线程
    }
}

运行结果:
实现简单的进度条
实现简单的进度条
作者:汪振宇 原文地址