前几天有个朋友去面试,碰到一个这样的问题:页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度显示工作。我在网上查了一下,加上自己的理解做出了这个需求,具体运行的效果为:
首先是布局文件:
<?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"
tools:context="com.duanlian.progressbardemo.MainActivity">
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:id="@+id/progressbar"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
Activity里面具体实现:
package com.duanlian.progressbardemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ProgressBar;
/**
* 页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度显示工作。
*/
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
progressBarChange();
}
/**
* progressBar改变
*/
private void progressBarChange() {
//开启一个线程
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//得到progeressBar的最大长度
int progressBarMax = progressBar.getMax();
try {
//progressBar当前的长度没有达到他的最长度,让循环一直进行
while (progressBarMax != progressBar.getProgress()) {
//拿到一个每次前进的进度值,因为是要10s完成,所以分为10份
int stepProgress = progressBarMax / 10;
//progressBar当前的进度值
int currentProgress = progressBar.getProgress();
//让progressBar进度为每次前进最大值的十分之一
progressBar.setProgress(currentProgress + stepProgress);
//前进一次,睡眠一秒
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
//开启线程
thread.start();
}
/**
* 初始View
*/
private void initView() {
progressBar = (ProgressBar) findViewById(R.id.progressbar);
}
}
注释的比较清楚,就不具体细说了
demo下载地址:http://download.csdn.net/detail/dl10210950/9620396