您的位置:首页 > 产品设计 > UI/UE

利用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;

}

}



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: