在自定义视图中绘制在 onStop/onStart 之后不再执行



我正在使用自定义视图来绘制滑块(带有两个手柄(。

自定义视图正在扩展约束布局,我在构造函数中设置 setWillNotDraw((,一切正常 - 直到包含自定义视图的片段停止并重新启动。从这一刻起,onDraw 方法在调用 invalidate(( 后不再执行。在调试期间,我检查了willNotDraw-Flag,它仍然设置为false。

  • 我正在使用 kotlinx
  • 我在初始化块中调用setWillNotDraw(false(
  • 我测试了一下,如果包含片段被创建两次,但那里的一切看起来都很正常。
  • 我保证,调用了 invalidate((。
  • 我保证,willNotDraw((设置为假。
  • 自定义视图将添加到布局中的片段中.xml
  • onCreateonCreateView,片段的onViewCreated只被调用一次

自定义视图中的初始化块

init {
View.inflate(context, R.layout.layout_slider, this)
setWillNotDraw(false)
}

自定义视图中的onDraw 函数

override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
Timber.d("onDraw")
}

停止并启动包含片段后,onDraw不再输出,而其他一切正常。

当我写我的问题时,我到处打电话给invalidate(),我想重新绘制视图。

我将初始化块更改为

init {
view = inflate(context, R.layout.layout_slider, this)
setWillNotDraw(false)
}

并使用view?.invalidate()而不是invalidate().

现在一切正常,尽管我不知道为什么它会有所作为。

最新更新