Android onDraw不执行

自定义控件中,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分钟,然后在这里找到了答案,更详细的解释也在里面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容