在onStop / onStart

时间:2018-05-24 08:42:41

标签: android kotlin android-custom-view ondraw

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

自定义视图正在扩展ConstraintLayout,我在构造函数中设置了setWillNotDraw(),一切正常 - 直到包含自定义视图的片段停止并再次启动。从这一刻开始,在调用invalidate()之后不再执行onDraw方法。在调试过程中,我检查了willNotDraw-Flag并且它仍然设置为false。

  • 我正在使用kotlinx
  • 我在init block中调用setWillNotDraw(false)
  • 我测试过,如果包含的片段被创建了两次,但看起来很正常。
  • 我保证,会调用invalidate()。
  • 我放心,willNotDraw()设置为false。
  • 自定义视图将添加到layout.xml
  • 中的片段中
  • onCreateonCreateViewonViewCreated片段仅被调用一次
自定义视图中的

init block

init {
  View.inflate(context, R.layout.layout_slider, this)
  setWillNotDraw(false)
}
自定义视图中的

onDraw函数

override fun onDraw(canvas: Canvas?) {
  super.onDraw(canvas)

  Timber.d("onDraw")
}

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

1 个答案:

答案 0 :(得分:0)

当我写下我的问题时,我到处都叫invalidate(),我想重新绘制视图。

我将初始化块更改为

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

  setWillNotDraw(false)
}

并使用view?.invalidate()代替invalidate()

现在一切正常,虽然我不知道它为什么会有所作为?有没有人对此有所了解?