在本节中,作者只写出了进度条的各种样式,包括圆形、条形,还有自定义的条形,我想如果能让条形进度条走满后再继续从零开始,于是我加入了一个条件语句。作者的代码中需要学习的是handler在主线程和子线程中的作用,还有子线程的建立。重置按钮暂时还没有使用,可能是线程与按钮之间的控制联系没有建立好。
MainActivity.java
-
public class MainActivity extends Activity
-
{
-
// 该程序模拟填充长度为100的数组
-
private int[] data = new int[100];
-
Button button1;
-
int hasData = 0;
-
// 记录ProgressBar的完成进度
-
int status = 0;
-
ProgressBar bar , bar2;
-
// 创建一个负责更新的进度的Handler
-
Handler mHandler = new Handler()
-
{
-
@Override
-
public void handleMessage(Message msg)
-
{
-
// 表明消息是由该程序发送的
-
if (msg.what == 0x111)
-
{
-
bar.setProgress(status);
-
bar2.setProgress(status);
-
}
-
}
-
};
-
@Override
-
public void onCreate(Bundle savedInstanceState)
-
{
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
bar = (ProgressBar) findViewById(R.id.bar);
-
bar2 = (ProgressBar) findViewById(R.id.bar2);
-
button1 = (Button) findViewById(R.id.button1);
-
// 启动线程来执行任务
-
new Thread()
-
{
-
public void run()
-
{
-
while (status < 100)
-
{
-
// 获取耗时操作的完成百分比
-
status = doWork();
-
// 发送消息
-
mHandler.sendEmptyMessage(0x111);
-
}
-
}
-
}.start();
-
}
-
// 模拟一个耗时的操作
-
public int doWork()
-
{
-
// 为数组元素赋值
-
data[hasData++] = (int) (Math.random() * 100);
-
try
-
{
-
Thread.sleep(100);
-
}
-
catch (InterruptedException e)
-
{
-
e.printStackTrace();
-
}
-
if (hasData == 100) {
-
hasData=0;
-
}
-
return hasData;
-
}
-
}
|
XML文件
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
android:orientation="vertical"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent">
-
<LinearLayout
-
android:layout_marginTop="40dp"
-
android:orientation="horizontal"
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content">
-
<!-- 定义一个大环形进度条 -->
-
<ProgressBar
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
style="@android:style/Widget.ProgressBar.Large"/>
-
<!-- 定义一个中等大小的环形进度条 -->
-
<ProgressBar
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"/>
-
<!-- 定义一个小环形进度条 -->
-
<ProgressBar
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
style="@android:style/Widget.ProgressBar.Small"/>
-
</LinearLayout>
-
<TextView
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:text="任务完成的进度"/>
-
<!-- 定义一个水平进度条 -->
-
<ProgressBar
-
android:id="@+id/bar"
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:max="100"
-
style="@android:style/Widget.ProgressBar.Horizontal"/>
-
<!-- 定义一个水平进度条,并改变轨道外观 -->
-
<ProgressBar
-
android:id="@+id/bar2"
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:max="100"
-
android:progressDrawable="@drawable/my_bar"
-
style="@android:style/Widget.ProgressBar.Horizontal"/>
-
-
<Button
-
android:id="@+id/button1"
-
android:layout_marginTop="30dp"
-
android:layout_gravity="center_horizontal"
-
android:text="重置"
-
android:textSize="30dp"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"/>
-
</LinearLayout>
|
Mybar.xml
-
<?xml version="1.0" encoding="UTF-8"?>
-
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-
<!-- 定义轨道的背景 -->
-
<item android:id="@android:id/background"
-
android:drawable="@drawable/no" />
-
<!-- 定义轨道上已完成部分的样式 -->
-
<item android:id="@android:id/progress"
-
android:drawable="@drawable/ok" />
-
</layer-list>
|
效果: