用进度条监视“以Timer控制开始与结束”的任务

情况简介:
通过两个Timer,分别计时,下发命令,一个开始命令,一个结束命令。
要求:进度条在下发开始命令时开始动画,下发结束命令时达到满值并结束动画。

在MainActivity中,实现两个Timer进行计时,此处到达计时时间会在logcat中输出一条信息,并通过intent开启Progress.java。在Progress.java中实现对进度条的配置。

MainActivity.java的代码:

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private Timer mTimer1;
    private TimerTask mTask1;
    private Timer mTimer2;
    private TimerTask mTask2;
    private long begin_time = 1000 * 4;
    private long end_time = 1000 * 22;
    private int num = 0;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) this.findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                Intent intent = new Intent(MainActivity.this, Progress.class);
                intent.putExtra("start", begin_time);
                intent.putExtra("end", end_time);
                startActivity(intent);

                mTimer1 = new Timer();
                mTask1 = new TimerTask() {// 几秒之后num自加1
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub

                        // do someting....
                        num++;
                        // Toast.makeText(MainActivity.this, "num=" + num,
                        // 1).show();
                        System.out.println("第一次计时");
                        mTimer1.cancel();

                    }
                };
                mTimer1.schedule(mTask1, begin_time);

                mTimer2 = new Timer();
                mTask2 = new TimerTask() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        // do someting....
                        num++;
                        // Toast.makeText(MainActivity.this, "num=" + num,
                        // 1).show();
                        System.out.println("第二次计时");
                        mTimer2.cancel();

                    }
                };
                mTimer2.schedule(mTask2, end_time);

            }
        });

    }

}

activity.xml代码:

<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="${relativePackage}.${activityClass}" 
    android:background="#cccccc">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="86dp"
        android:text="计时开始" />

</RelativeLayout>

Progress.java代码:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
import android.widget.TextView;

public class Progress extends Activity {
    private ProgressBar mProgress;
    private TextView textView;
    private int mProgressStatues = 0;
    private long start_time;
    private long end_time;
    private int i = 0;
    private long delay;
    private int m;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progress);

        mProgress = (ProgressBar) this.findViewById(R.id.progressBar1);
        textView = (TextView) this.findViewById(R.id.textView1);
        Intent intent = getIntent();
        start_time = intent.getLongExtra("start", 0);
        end_time = intent.getLongExtra("end", 0);
        delay = end_time / 100;//进度条每前进一格需要的时间
        m=(int)(start_time/delay);//因为要计时到start_time后进度条才开始显示进度
                //m就是进度条计时开始需要几次才能开始显示进度
                //而(mProgressStatues-m)*delay=mProgressStatues*delay-m*delay
                //                             =mProgressStatues*delay-start_time
                //当mProgressStatues=100时,    =100*delay-start_time
                //                             =end_time-start_time
                //这就是从开始到结束经历的时间
        mProgress.setMax(100-m);

        new Thread(new Runnable() {
            public void run() {
                while (mProgressStatues < 100) {
                    for (; i < 101; i++) {
                        try {
                            Thread.sleep(delay);
                            mProgressStatues = i;
                            Message msg = new Message();
                            msg.what = (int) (i * delay);
                            mHandler.sendMessage(msg);
                            mHandler.post(new Runnable() {
                                @Override
                                public void run() {
                                    // TODO Auto-generated method stub
                                    if (!((i * delay) < start_time)) {                                      
                                        mProgress.setProgress(mProgressStatues-m);
                                    }
                                }
                            });
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }
                    }
                }
            }
        }).start();

    }

    public Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            setTime(msg.what, textView);
        }
    };

    protected void setTime(int i, TextView textView) {
        long diff = (long) i;
        if (!((diff - start_time) < 0)) {
            diff = diff - start_time;
            long hours = diff / (1000 * 60 * 60);
            long minutes = (diff - hours * (1000 * 60 * 60)) / (1000 * 60);
            long seconds = (diff - hours * (1000 * 60 * 60) - minutes * (1000 * 60)) / 1000;
            System.out.println("" + hours + "小时" + minutes + "分" + seconds + "秒");
            textView.setText("" + hours + "小时" + minutes + "分" + seconds + "秒");
        }

    }
}

progress.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#cccccc" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="00时00分00秒" />

</LinearLayout>

源码下载:用进度条监视“以Timer控制开始与结束”的任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值