invalidate()执行后,为什么onDraw()却不执行

如题,现象:当android:minSdkVersion="14"或大于14,android:targetSdkVersion="14"或大于14时,invalidate... 如题,现象:当android:minSdkVersion="14"或大于14, android:targetSdkVersion="14" 或大于14时,invalidate()执行后,onDraw()不执行。当改为13或小于13时,invalidate()执行后,onDraw()会执行。总之就是不能大于14,也就是4.0,onDraw()才会执行。请高手指点一下这是为什么?谢谢 展开
 我来答
瑜乐乐翻天
推荐于2018-03-19 · TA获得超过493个赞
知道小有建树答主
回答量:1013
采纳率:0%
帮助的人:253万
展开全部
1、OnDraw函数在程序启动和任何界面刷新情况下都会调用,你点一下菜单或者鼠标通过客户区,就会造成无数个弹出窗口。
2、如果程序运行中一个弹出也没有,那么两种情况:一个是OnDraw不是系统提供的重载函数,你写错了,另外一个是你的View不是标准CView继承类,比如CFormView继承,那么OnDraw是无效的,调用的是OnPaint。
3、view的invalidate未必一定会出发onDraw,
如果高版本没有出发onDraw,可能是做了相关的优化,
认为你此次的invalidate并不需要出发onDraw,或者是其他的逻辑。
如果你想在搞版本也出发试试以下方法
方法1:
((View)view.getParnet()).invalidate();
方法2:
view.invalidate();view.forceLayout();view.requestLayout();
金山毒霸
2024-10-31 广告
大部分系统错误,是因为某些DLL文件丢失造成的,比如未安装DirectX9或DirectX 9.0组件已损坏、缺少Visual C ++库、未安装.net库。解决方法如下:一、 手动解决方法1、先确定电脑操作系统是多少位的,现在的电脑一般都... 点击进入详情页
本回答由金山毒霸提供
匿名用户
2014-03-14
展开全部
view的invalidate未必一定会出发onDraw,如果高版本没有出发onDraw,可能是做了相关的优化,认为你此次的invalidate并不需要出发onDraw,或者是其他的逻辑。如果你想在搞版本也出发试试以下方法方法1:((View)view.getParnet()).invalidate();方法2:view.invalidate();view.forceLayout();view.requestLayout();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-14
展开全部
因为4.0以后有硬件加速了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-14
展开全部
谢谢,你说的有道理,不过这两个方法在大于等于14时依然不管用,低版本倒是可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
出家人词悲
高赞答主

2015-09-01 · 大脑停止不了思考
知道大有可为答主
回答量:1.4万
采纳率:12%
帮助的人:3774万
展开全部
方法1:
((View)view.getParnet()).invalidate();
方法2:
view.invalidate();view.forceLayout();view.requestLayout();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式