WEB开发网
开发学院手机开发Android 开发 Android 中实现view的更新UI有两组方法的问题 阅读

Android 中实现view的更新UI有两组方法的问题

 2010-09-10 00:58:00 来源:WEB开发网   
核心提示:android中实现view的更新有两组方法,一组是invalidate,Android 中实现view的更新UI有两组方法的问题,另一组是postInvalidate,其中前者是在UI线程自身中使用,具体是在需要重绘的地方调用handler的sendMessage方法发送消息,紧接着会os会触发 handler中的h

android中实现view的更新有两组方法,

一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。

SDK中说:

public void invalidate()

Invalidate the whole view. If the view is visible, onDraw(Canvas) will be called at some point in the future. This must be called from a UI thread. To call from a non-UI thread, call postInvalidate().

public void postInvalidate ()

Cause an invalidate to happen on a subsequent cycle through the event loop. Use this to invalidate the View from a non-UI thread.

google的文档的说明实在是简单,往往看了开发中都会遇到这两个问题:

1. 没有任何异常,view没能刷新。

2. android应用异常终止,打开logcat会看到这样的异常信息, Only the original thread that created a view hierarchy can touch its views。

最后,通过查文档,上网查询才知道,invalidate和postInvalidate方法需要使用android提供的handler,才能实现重绘 ,而在文档的说明中却只字不提,真是简单啊。具体是在需要重绘的地方调用handler的sendMessage方法发送消息,紧接着会os会触发 handler中的handlerMessage方法,在handlerMessage方法中再调用view的invalidate或者 postInvalidate方法就能实现重绘。

class CustomizeView extends WhichView {

public CustomizeView(Context context) {

super(context);

final Handler handler = new Handler();

new Thread(new Runnable() {

@Override

public void run() {

// delay some minutes you desire.

/*try {

Thread.sleep(3000);

} catch (InterruptedException e) {

}*/

handler.post(new Runnable() {

public void run() {

concreteUpdateUI();

invalidate();

}

});

}

}).start();

}

protected void concreteUpdateUI() {

// Add concrete movement for UI updates.

// ...

}

}

Tags:Android 实现 view

编辑录入:coldstar [复制链接] [打 印]
赞助商链接