项目效果图:
1.
点击开始后,开始按钮变为继续按钮,进度条不断增长,可以暂停,也可以继续增长
2.
下面说一下代码部分:
1.自定义的ProgressBar
public class MyProgressBar extends ProgressBar{
private String text;
private Paint mPaint;
private static final int TEXT_SIZE=25;
public MyProgressBar(Context context, AttributeSet attrs) { //必须要写的构造方法
super(context, attrs);
initText();
}
@Override
public synchronized void setProgress(int progress) {
setText(progress);
super.setProgress(progress);
}
// 设置文字内容
private void setText(int progress) {
this.text = progress+"%";
}
// 初始化,画笔
private void initText() {
this.mPaint = new Paint();
this.mPaint.setAntiAlias(true); //????
this.mPaint.setColor(Color.WHITE);
this.mPaint.setTextSize(TEXT_SIZE);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect rect = new Rect();
this.mPaint.getTextBounds(this.text, 0, this.text.length(), rect);
int x = (getWidth() / 2) - rect.centerX();
int y = (getHeight() / 2) - rect.centerY();
canvas.drawText(this.text, x, y, this.mPaint);
}
}
2.布局文件代码:
<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" >
<com.example.mainactivity.MyProgressBar
android:id="@+id/myprogressbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:layout_marginTop="20dp"
/>
<!--
Style风格可分为:
大圆:?android:attr/progressBarStyleLarge
小圆:?android:attr/progressBarStyleSmall
水平:?android:attr/progressBarStyleHorizontal
-->
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:layout_alignParentLeft="true"
android:text="开始"
/>
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:layout_alignParentRight="true"
android:text="暂停"
/>
</RelativeLayout>
3.Activity全部代码:
Handler handler;
ProgressBar progressBar;
Button start,stop;
Progress progress ;
boolean progresspanduan = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar) findViewById(R.id.myprogressbar);
start = (Button) findViewById(R.id.start);
start.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(progresspanduan){
if(progress == null){
start.setText("继续");
progress = new Progress();
progress.setPanduan(true);
progress.start();
progresspanduan = false;
}
}else {
start.setText("继续");
progress.setPanduan(true);
}
}
});
stop = (Button) findViewById(R.id.stop);
stop.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
progress.setPanduan(false);
}
});
handler = new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
progressBar.setProgress(msg.what);
return false;
}
});
}
@Override
protected void onPause() {
handler.removeCallbacks(progress);
super.onPause();
}
class Progress extends Thread{
boolean panduan;
int count = 0;
public void setPanduan(boolean panduan) {
this.panduan = panduan;
}
public void run() {
while (true) {
for (int i = count; i <= 100; ) {
handler.sendEmptyMessage(i);
System.out.println(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
break;
}
//当进度条达到最大的时候,循环退出
if(i == 100){
panduan = false;
break;
}
if(panduan){
count ++ ;
break;
}
}
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
android.os.Process.killProcess(android.os.Process.myPid());
}
return super.onKeyDown(keyCode, event);
}
ok,就是这样。。。