一、效果图
二、代码示例
1、MainActivity.java
package com.jzd.progressbar;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private TextView tProgress;
private Handler handler;
int progress=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 进度条监听事件
public void proBar(View view) {
progressBar = findViewById(R.id.progressBar);
tProgress =findViewById(R.id.progress);
//Handler结合线程的消息队列异步发送消息与处理消息
handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what==0x111){
progressBar.setProgress(progress);
tProgress.setText(progress+"%");
}else{
Toast.makeText(MainActivity.this, "加载完成", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
tProgress.setVisibility(View.GONE);
//页面跳转
Intent intent = new Intent(MainActivity.this,LightActivity.class);
startActivity(intent);
}
}
};
// 开启一个线程
new Thread(new Runnable() {
@Override
public void run() {
while (true){
progress=doWork();
Message message = new Message();
if (progress<=100){
message.what=0x111;
handler.sendMessage(message);
}else{
message.what=0x110;
handler.sendMessage(message);
break;
}
}
}
}).start();
}
//模拟一个耗时操作
private int doWork() {
progress+=Math.random()*8;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
return progress;
}
}
2、activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/deng"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/light"
android:textColor="#FF9800"
android:textSize="50sp"/>
<ProgressBar
android:id="@+id/progressBar"
android:max="100"
android:onClick="proBar"
style="@style/progressB_style" />
<TextView
android:id="@+id/progress"
android:text="0%"
android:textColor="#0B0A0A"
android:textSize="40sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/progressBar"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="330dp"
android:layout_marginEnd="38dp"
android:layout_marginRight="18dp"
android:layout_marginBottom="45dp" />
</RelativeLayout>
3、LightActivity.java
package com.jzd.progressbar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ToggleButton;
public class LightActivity extends AppCompatActivity {
private ImageView imageView;
private ToggleButton toggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_light);
toggleButton = findViewById(R.id.btn_light);
imageView = findViewById(R.id.lightPhoto);
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
imageView.setBackgroundResource(isChecked?R.drawable.on:R.drawable.off);
}
});
}
}
4、activity_light.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LightActivity"
android:orientation="vertical">
<ToggleButton
android:id="@+id/btn_light"
android:checked="false"
android:textOff="@string/light_off"
android:textOn="@string/light_on"
style="@style/toggle_style" />
<ImageView
android:id="@+id/lightPhoto"
android:background="@drawable/off"
style="@style/image_style" />
</LinearLayout>
5、styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="toggle_style">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">40sp</item>
<item name="android:textColor">#FF5722</item>
<item name="android:textStyle">bold</item>
</style>
<style name="image_style">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
</style>
<style name="progressB_style" parent="android:Widget.ProgressBar.Horizontal">
<item name="android:layout_marginRight">20dp</item>
<item name="android:layout_marginLeft">20dp</item>
<item name="android:layout_marginTop">15dp</item>
<item name="android:layout_marginBottom">15dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_alignParentBottom">true</item>
</style>
</resources>
四、博客地址
五、素材图片