How can you tell when a layout has been drawn?

后端 未结 8 697
轻奢々
轻奢々 2020-11-22 08:07

I have a custom view that draws a scrollable bitmap to the screen. In order to initialize it, i need to pass in the size in pixels of the parent layout object. But during th

8条回答
  •  半阙折子戏
    2020-11-22 08:38

    Better with kotlin extension functions

    inline fun View.waitForLayout(crossinline yourAction: () -> Unit) {
        val vto = viewTreeObserver
        vto.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                when {
                    vto.isAlive -> {
                        vto.removeOnGlobalLayoutListener(this)
                        yourAction()
                    }
                    else -> viewTreeObserver.removeOnGlobalLayoutListener(this)
                }
            }
        })
    }
    

提交回复
热议问题