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内会出现死循环,但是在死循环之前屏幕上的数字也是不会改变的,谁能告诉我为什么呢
- Timer & setText()
- text,setText
- getText() & setText()
- timer
- Timer
- timer
- timer
- Timer
- Timer......
- timer
- TIMER
- TIMER
- TIMER
- timer
- Timer
- Timer
- timer
- timer
- 谈谈强制类型转换
- 喔,无日之年乃有星
- PM2-LH10,GL-N12F,EX-28A,CX-411
- IE,firefox内存溢出原因与解决方法
- 听孟岩说"你的技术路线与核心竞争力"
- Timer & setText()
- 用命令行开启关闭windows系统服务
- 精光闪耀非真金
- 理解并解决IE的内存泄漏方式[翻译3]
- 理解并解决IE的内存泄漏方式[翻译4]
- 进程运行时统计系统
- 分享一款很好用的打印软件:小灰狼快递单打印软件v928
- 深度排序显示处理
- Spring 与 ibatis 整合