自定义控件中,invalidate后onDraw不执行怎么办,今天就遇到了这事。
还是学艺不精的问题。
首先不解释那么多为什么,能实现我们要做的事情就成。
解决办法
方法1:
在构造方法处添加一个方法:
setWillNotDraw(false);
方法2:
重写dispatchDraw(Canvas canvas)方法,把onDraw(Canvas canvas)里的逻辑迁移到dispatchDraw下。
解释
为什么会出现onDraw不执行具体还真不知道,为什么这么说。首先我在ProjectA写了一个自定义控件:
public class CircleViewByImage extends FrameLayout
手机上完美运行。
然后新建了一个ProjectB,把这个CircleViewByImage 复制粘贴过来,一运行就发现下面Log不打印了。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.e("tag", "onDraw: ");
}
这事足足整了40分钟,然后在这里找到了答案,更详细的解释也在里面。