你不在子线程中操作,并将postInvalidate()改为invalidate(),运行看能不能刷新呢
解决方案 »
- android可以用LINUX的SO库文件吗?
- android4.0 合并联系人
- 唉,问个弱弱问题吧。
- 如何获取当前运行的屏幕的activity的实例对象??
- 豆瓣API的HTTP POST的参数如何设置?#HttpClien#
- 紧急求助 android如何通过post请求获得服务器返回string信息 急用但是本人被赶鸭子上架、、
- 求助!!!
- 找个制作自定义控件的第三方库 android
- 谷歌、安卓都被墙,哪里好好下载sdk和 eclipse adt插件,
- 怎样动态修改(替换)Launcher桌面的图标?
- 到谷歌下载最新的adt,找不到 Annotation processing
- 做Android应用开发 和 framework开发 那个好?
另外,为什幺要调用postInviliade呢, Java 的动态绑定机制不是会默认调用子类的onDraw方法吗? 你在线程中再调取一次postInvliade有什么意义吗?
我是程序要不断的去改变这个自定义View的显示形状,所以要不断的重绘,我这里为了让问题清楚没有将其他逻辑包含进来
我是程序要不断的去改变这个自定义View的显示形状,所以要不断的重绘,我这里为了让问题清楚没有将其他逻辑包含进来..那就在 onDraw() 里调用invaliade,另外建议使用Surface View 实现,避免阻塞线程
但是这个是没有效果的。 view 中有个skipInvalidate()方法 说的就是 当view未显示时候,是被skip掉的。假如你delay了这个1-2秒, 这个代码执行时后界面已经生成了,他的invalidate就生效, 就会出现你想要的执行两次。另 界面生成时候,必然会调用一次onDraw。
/**
* Invalidate the whole view. If the view is visible,
* {@link #onDraw(android.graphics.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 {@link #postInvalidate()}.
*/
public void invalidate() {
invalidate(true);
} public void invalidate(Rect dirty) {
if (skipInvalidate()) {
return;
}
}
}