Progressbar2

activity_main.xml

复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:max="100"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="50dp" />
</RelativeLayout>
复制代码

 

MainActivity.java

复制代码
package com.example.myprogressbar2;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.WindowManager;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private ProgressBar progressBar;
    private int mProgress = 0;
    private Handler mHandle;

    @SuppressLint("HandlerLeak")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //设置全屏显示
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        progressBar=findViewById(R.id.progressBar);
        //实例化Handler类,Android不支持主线程更新UI组件
        mHandle= new Handler(Looper.myLooper()){
            @Override
            public void handleMessage(@NonNull 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;
                        mHandle.sendMessage(m);
                    }else{
                        m.what = 0x110;
                        mHandle.sendMessage(m);
                        //耗时操作完成,退出while循环
                        break;
                    }
                }
            }
            //模拟耗时操作
            private int doWork(){
                //随机数
                mProgress +=Math.random()*10;
                try {
                    //休眠200ms
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return mProgress;
            }
        }).start();//开启线程
    }
}
复制代码

 

posted @   雨潇潇兮  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示