当调用'invalidate()'方法后,系统会自动调用'onDraw()'方法进行重绘。如果'onDraw()'方法没有被执行,可能是以下原因之一:

  1. 'onDraw()'方法被重写但没有调用父类的'onDraw()'方法:在自定义'View'中,如果重写了'onDraw()'方法,需要确保在自己的代码中调用了父类的'onDraw()'方法,以便执行默认的绘制操作。
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    // 自定义的绘制操作
}
  1. 'invalidate()'方法没有被正确调用:确保在需要重绘的时候调用了'invalidate()'方法。可以在'View'的构造函数、触摸事件、数据更新等地方调用'invalidate()'方法。

  2. 'View'的可见性问题:如果'View'的可见性设置为'INVISIBLE'或'GONE','onDraw()'方法将不会被执行。确保'View'的可见性为'VISIBLE'。

  3. 'View'的尺寸为0:如果'View'的宽度或高度为0,'onDraw()'方法可能不会被执行。确保'View'的尺寸大于0。

如果以上方法都没有解决问题,可以尝试使用'postInvalidate()'方法代替'invalidate()'方法,它会在主线程的消息队列中发送一个重绘的请求,确保'onDraw()'方法被执行。

Android View 调用 invalidate() 后没有执行 onDraw() 的原因及解决方法

原文地址: https://www.cveoy.top/t/topic/bpUF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录