【问题标题】:onDraw in custom view is not executed anymore after onStop/onStartonStop/onStart 后自定义视图中的 onDraw 不再执行
【发布时间】:2018-11-03 09:54:43
【问题描述】:

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

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

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

初始化块在自定义视图中:

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

onDraw 函数在自定义视图中:

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

  Timber.d("onDraw")
}

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

【问题讨论】:

    标签: android kotlin android-custom-view ondraw


    【解决方案1】:

    当我写下我的问题时,我到处打电话给invalidate(),我想在那里重绘视图。

    我将 init 块 更改为

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

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

    现在一切正常,虽然我不知道为什么会有所作为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多