在android开发中ProgressBar是经常要用到的控件,用到ProgressBar一般有两种情况:一种是确定进度,另一种是不确定进度,今天做了一个demo分享给大家(源码下载地址:http://download.csdn.net/detail/caoshichao520326/5264570)。
第一步:修改新建的Android工程文件的main.xml。此处我定义了四个ProgressBar,两个圆形和两个条形的ProgresBar,分别用于演示确定进度和不确定进度的ProgressBar。代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/large_indeterminate"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:indeterminate="true" />
<ProgressBar
android:id="@+id/horizontal_indeterminate"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:indeterminate="true" />
<Button
android:id="@+id/indeterminate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/indeterminate" />
<ProgressBar
android:id="@+id/large_determinate"
style="?android:attr/progressBarStyleLargeInverse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:max="100"
android:visibility="gone" />
<ProgressBar
android:id="@+id/horizontal_determinate"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:visibility="gone" />
<TextView
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/progress" />
<Button
android:id="@+id/determinate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/determinate" />
</LinearLayout>
第二步 :修改MainActivity的内容,代码如下:
package com.csc.progressbartest;
import com.example.progressbartest.R;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class ProgressBarActivity extends Activity {
//定义是否显示进度条
boolean isVisable = true;
//定义显示精度条的进度
int status = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress_bar);
final Handler handler = new Handler();
final TextView progress = (TextView)findViewById(R.id.progress);
final ProgressBar largeIndeterminate = (ProgressBar)findViewById(R.id.large_indeterminate);
final ProgressBar horizontalIndeterminate = (ProgressBar)findViewById(R.id.horizontal_indeterminate);
final ProgressBar largeDeterminate = (ProgressBar)findViewById(R.id.large_determinate);
final ProgressBar horizontalDeterminate = (ProgressBar)findViewById(R.id.horizontal_determinate);
Button indeterminate = (Button)findViewById(R.id.indeterminate);
Button determinate = (Button)findViewById(R.id.determinate);
indeterminate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//当单击不确定按钮时显示或隐藏进度条
if (isVisable) {
largeIndeterminate.setVisibility(View.VISIBLE);
horizontalIndeterminate.setVisibility(View.VISIBLE);
isVisable = false;
} else {
largeIndeterminate.setVisibility(View.GONE);
horizontalIndeterminate.setVisibility(View.GONE);
isVisable = true;
}
}
});
determinate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
status = 0;
while (status<100) {
handler.post(new Runnable() {
@Override
public void run() {
//显示进度条
progress.setVisibility(View.VISIBLE);
largeDeterminate.setVisibility(ProgressBar.VISIBLE);
horizontalDeterminate.setVisibility(ProgressBar.VISIBLE);
largeDeterminate.setProgress(status);
horizontalDeterminate.setProgress(status);
//显示已进行的进度
progress.setText("进度:"+status+"%");
}
});
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
//改变进度条的进度
status++;
}
handler.post(new Runnable() {
@Override
public void run() {
//隐藏进度条
largeDeterminate.setVisibility(View.GONE);
horizontalDeterminate.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
}
});
}
}).start();
}
});
}
}
第三部 :运行效果图如下:
源码下载地址:http://download.csdn.net/detail/caoshichao520326/5264570