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.
// ...
}
}

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android EditText设置不可写
  6. Android(安卓)拨号器的简单实现
  7. android实现字体闪烁动画的方法
  8. Android中dispatchDraw分析
  9. Android中不同应用间实现SharedPreferences数据共享

随机推荐

  1. android使用BottomNavigationView与NavCo
  2. Android之AsyncTask的用法
  3. Android(安卓)源码解析Handler处理机制(一
  4. Android自学笔记-14-意图(Intent)
  5. Android中导入的java包详解
  6. Android(安卓)提示版本更新的实现
  7. Flutter多平台适配机制就是这么简单
  8. Android(安卓)SO文件的概念、兼容、适配
  9. android: 接收和发送短信
  10. Bitmaps加载之内存管理