实现简单的进度条
程序员文章站
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();//开启线程
}
}
运行结果:
作者:汪振宇 原文地址