今天想给APP做一个带进度条的启动页面,照着别人的例子总出错。也没看懂,反正我也不知道怎么蒙对的。

我是小白,没搞清楚什么不能在主线程中更新UI等等一大堆原理,总之这样写没报错,记录一下:

new Handler(new Handler.Callback()

会自动生成方法。

activity_start.xml:只是在背景上加了一个进度条:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     android:background="@drawable/start"
 8     tools:context=".StartActivity">
 9     
10     <ProgressBar
11         android:id="@+id/progressBar"
12         style="@android:style/Widget.ProgressBar.Horizontal"
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:layout_marginBottom="50dp"
16         android:layout_marginLeft="@dimen/l_padding"
17         android:layout_marginRight="@dimen/l_padding"
18         android:max="100"
19         android:progress="50"
20         app:layout_constraintEnd_toStartOf="parent"
21         app:layout_constraintBottom_toBottomOf="parent"
22         app:layout_constraintStart_toStartOf="parent" />
23         
24 </androidx.constraintlayout.widget.ConstraintLayout>

StartActivity.java:只需要改背景图片、包名、跳转页

 1 package com.example.career;
 2 
 3 import androidx.annotation.NonNull;
 4 
 5 import android.app.Activity;
 6 import android.content.Intent;
 7 import android.os.Bundle;
 8 import android.os.Handler;
 9 import android.os.Message;
10 import android.view.View;
11 import android.widget.ProgressBar;
12 import android.widget.Toast;
13 
14 public class StartActivity extends Activity {
15 
16     private ProgressBar progressBar;
17     private int mProgress = 0;
18     private Handler mHandler;
19 
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_start);
24 
25         progressBar = findViewById(R.id.progressBar);
26 
27         mHandler = new Handler(new Handler.Callback() {
28 
29             @Override
30             public boolean handleMessage(@NonNull Message message) {
31 
32                 if (message.what == 0x111) {
33 
34                     progressBar.setProgress(mProgress);
35 
36                 } else {
37 
38          39                     progressBar.setVisibility(View.GONE);
40                     Intent intent = new Intent(StartActivity.this, MainActivity.class);  //跳转页
41                     startActivity(intent);
42                 }
43 
44                 return false;
45             }
46 
47         });
48 
49         //启动线程来执行任务
50 
51         new Thread(new Runnable() {
52             @Override
53             public void run() {
54                 while (true) {
55                     mProgress = doWork();
56                     Message m = new Message();
57                     if (mProgress < 100) {
58                         m.what = 0x111;
59                         mHandler.sendMessage(m);
60                     } else {
61                         m.what = 0x110;
62                         mHandler.sendMessage(m);
63                         break;
64                     }
65                 }
66             }
67 
68             private int doWork() {
69 
70                 mProgress += Math.random() * 10;
71 
72                 try {
73                     Thread.sleep(200);
74                 } catch (InterruptedException e) {
75                     e.printStackTrace();
76                 }
77                 return mProgress;
78 
79             }
80 
81         }).start();
82 
83     }
84 
85 }

 

版权声明:本文为xiaoyao-blog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiaoyao-blog/p/13627536.html