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();//开启线程 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?