猿问

请高手指点如下情况是为什么?谢谢

如题,现象:当android:minSdkVersion="14"或大于14, android:targetSdkVersion="14" 或大于14时,invalidate()执行后,onDraw()不执行。当改为13或小于13时,invalidate()执行后,onDraw()会执行。总之就是不能大于14,也就是4.0,onDraw()才会执行。

Cats萌萌
浏览 242回答 3
3回答

月关宝盒

谢谢,你说的有道理,不过这两个方法在大于等于14时依然不管用,低版本倒是可以

MYYA

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();

富国沪深

view的invalidate未必一定会出发onDraw,如果高版本没有出发onDraw,可能是做了相关的优化,认为你此次的invalidate并不需要出发onDraw,或者是其他的逻辑。如果你想在搞版本也出发试试以下方法方法1:((View)view.getParnet()).invalidate();方法2:view.invalidate();view.forceLayout();view.requestLayout();
随时随地看视频慕课网APP

相关分类

Android
我要回答