Timer & setText()

来源:互联网 发布:无线路由器mac地址 编辑:程序博客网 时间:2024/05/23 00:09

在这里分享另一个Timer 的例子

 

eg 2: 每过一秒屏幕上显示一个数字 10->20->5->10,每次跳跃5

 

这次我会写完整一点

 

public class Test extends Activity{


    private int mOld;//记录初始值

    private int mCur;

    private TextView mStart;

    private Timer mTimer=null;

    private int i=0;

 

    private Handler mHandler = new Handler(){//收到message,每隔1000ms收到一次

         public void handleMessage(Message msg){

             if(mCur+5<=20 && i==0){

                  mStart.setText(String.valueOf(mCur));//改变屏幕上所显数字

                  mCur=mCur+5;

             }else if (mCur-5>=5 && i==1){

                  i=1;

                  mStart.setText(String.valueOf(mCur));
                  mCur=mCur-5;

             }else if (mCur+5<=20 && i==2){

                  i=2;

                  mStart.setText(String.valueOf(mCur));
                  mCur=mCur+5;

             }else{

                  mStart.setText(String.valueOf(mCur));

             }

        }

    };

 

    public class TimerTaskTest extends TimerTask {//时间到的时候发出message
        @Override
        public void run() {
            mHandler.sendMessage(mHandler.obtainMessage());
        }
    }

 

    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mOld=10;

        mCur=mOld;

        mStart = (TextView) findViewById(R.id.startview);
        mStart.setClickable(true);//设置为接收click事件

        mStart.setOnClickListener(new OnClickListener() {//start按下后的响应
            public void onClick(View view) {
                view.setClickable(false);// 设置为不接收click事件
                mTimer = new Timer();
                mTimer.schedule(new TimerTaskTest(), 100, 1000);//设置起始时间和间隔时间
            }
        });

    }

}

 


最开始用eg 1的方法来setText(),但不成功,只会显示最后一次的数字在屏幕上,原因不明

现将原始的代码也放上来,高手指点一下

 

public class Test extends Activity{


    private int mOld;//记录初始值

    private int mCur;

    private TextView mStart;

    private Timer mTimer=null;

    private boolean i=true;

 

    private Handler mHandler = new Handler(){//收到message

         public void handleMessage(Message msg){

         i=true;

        }

    };

 

    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mOld=10;

        mCur=mOld;

        mStart = (TextView) findViewById(R.id.startview);
        mStart.setClickable(true);//设置为接收click事件

        mStart.setOnClickListener(new OnClickListener() {//start按下后的响应
            public void onClick(View view) {
                view.setClickable(false);// 设置为不接收click事件

             while(mCur+5<=20){

                  if(i){

                       i=false;

                       mStart.setText(String.valueOf(mCur));//改变屏幕上所显数字

                       mCur=mCur+5;

                       startTimer();//停留一秒

                  }

           }

            while (mCur-5>=5){

                 if(i){

                       i=false;

                       mStart.setText(String.valueOf(mCur));
                       mCur=mCur-5;

                       startTimer();

                 }

             }

            while (mCur+5<=20){

                 if(i){

                        i=true;

                        mStart.setText(String.valueOf(mCur));
                        mCur=mCur+5;

                        startTimer();

                  }

             }

            mStart.setText(String.valueOf(mCur));

            }
        });

    }

 

    private void startTimer() {
          mTimer = new Timer();
          if (mTimerTask == null) {
                mTimerTask = new TimerTask() {
                public void run() {
                    mTimer.cancel();
                    mHandler.sendMessage(mHandler.obtainMessage());//发出1s结束的信号
                    mTimer = null;
                    mTimerTask = null;
                }
            };
            mTimer.schedule(mTimerTask, 1000);//设置为1s
        }

 

}

 

虽然这里的while在1s内会出现死循环,但是在死循环之前屏幕上的数字也是不会改变的,谁能告诉我为什么呢

原创粉丝点击