利用handler.post()更新UI
2013-02-27 22:50
381 查看
利用handler.post()更新UI
1.创建一个Handler 2.调用Handler.post(Runnable r)方法 3.Runnable运行在UI所在线程,所以可以直接调用View.invalidate()
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
publicclassTestHandlerextendsActivity{
privateMyView myView;
privateHandler mHandler;
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
myView =newMyView(this);
//创建一个Handler
mHandler =newHandler();
//调用Handler.post(Runnable r)方法
mHandler.post(newRunnable(){
@Override
publicvoid run(){
//直接调用View.invalidate(),更新组件
myView.invalidate();
//延迟5毫秒后执行线程
mHandler.postDelayed(this,5);
}
});
setContentView(myView);
}
classMyViewextendsView{
privatefloat x =0f;
publicMyView(Context context){
super(context);
}
protectedvoid onDraw(Canvas canvas){
super.onDraw(canvas);
x+=1;
Paint mPaint =newPaint();
mPaint.setColor(Color.BLUE);
canvas.drawRect(x,40, x+40,80, mPaint);
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------
需求:在界面上有两个按钮,一个开始,一个停止。点击开始按钮,更新应用的标题为当前时间。按停止按钮停止更新时间。
考察:handler的使用。
这里借助Handler来实现
package com.zhy.ui;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.zhy.shortcut.R;
public class RefershUiActivity extends Activity implements OnClickListener{
private static final int UPDATA_TITIE=1;
Button start;
Button stop;
//声明一个继承自Runnable的变量
MyRunnable runnable;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ui);
runnable=new MyRunnable();
start=(Button) findViewById(R.id.start);
stop=(Button) findViewById(R.id.stop);
//实列化Handler
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//更新应用标题
updateTitile(msg);
}
};
start.setOnClickListener(this);
stop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
//点击开始的时候调用handler.post()方法
handler.post(runnable);
break;
case R.id.stop:
//停止更新标题
if(runnable!=null){
handler.removeCallbacks(runnable);
}
break;
default:
break;
}
}
class MyRunnable implements Runnable{
//覆写run方法
@Override
public void run() {
//创建Message
Message msg=new Message();
//标记消息
msg.what=UPDATA_TITIE;
//设置数据
msg.obj=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date());
//发送消息
handler.sendMessage(msg);
//在run方法内部在调用postDelayed()方法。
handler.postDelayed(this, 1000);
}
}
//更新标题
private void updateTitile(Message msg) {
switch (msg.what) {
case UPDATA_TITIE:
RefershUiActivity.this.setTitle(String.valueOf(msg.obj));
break;
default:
break;
}
}
}
相关文章推荐
- 利用handler.post()更新UI
- 利用Handler来更新android的UI
- 如何利用Handler更新android的UI
- Handler.post()解决非主线程更新UI
- android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler&利用broadcast广播机制
- 利用Handler来更新android的UI
- 利用Handler来更新android的UI
- 利用Handler来更新android的UI
- 利用Handler来更新android的UI
- 利用Handler来更新android的UI
- android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
- 如何利用Handler更新android的UI
- Android Handler.post 难道真的可以在子线程更新UI???
- 利用Handler来更新android的UI
- android线程控制UI更新(Handler、post()、postDelayed()、postAtTime)
- android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
- Android开发中更新UI时runOnUIthread(Runnable)与Handler.post(Runnable)的区别及如何选择
- 如何利用Handler更新android的UI
- 利用handler更新UI
- 利用Handler来更新android的UI