Android View 调用 invalidate() 后没有执行 onDraw() 的原因及解决方法
当调用'invalidate()'方法后,系统会自动调用'onDraw()'方法进行重绘。如果'onDraw()'方法没有被执行,可能是以下原因之一:
- 'onDraw()'方法被重写但没有调用父类的'onDraw()'方法:在自定义'View'中,如果重写了'onDraw()'方法,需要确保在自己的代码中调用了父类的'onDraw()'方法,以便执行默认的绘制操作。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 自定义的绘制操作
}
-
'invalidate()'方法没有被正确调用:确保在需要重绘的时候调用了'invalidate()'方法。可以在'View'的构造函数、触摸事件、数据更新等地方调用'invalidate()'方法。
-
'View'的可见性问题:如果'View'的可见性设置为'INVISIBLE'或'GONE','onDraw()'方法将不会被执行。确保'View'的可见性为'VISIBLE'。
-
'View'的尺寸为0:如果'View'的宽度或高度为0,'onDraw()'方法可能不会被执行。确保'View'的尺寸大于0。
如果以上方法都没有解决问题,可以尝试使用'postInvalidate()'方法代替'invalidate()'方法,它会在主线程的消息队列中发送一个重绘的请求,确保'onDraw()'方法被执行。
原文地址: https://www.cveoy.top/t/topic/bpUF 著作权归作者所有。请勿转载和采集!