项目效果图:
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,就是这样。。。