至少它正在做我想要的事情(在运行时居中我的视图),但为什么它一遍又一遍地这样做?我的理解是,它应该在视图树有东西可绘制时被调用,这不应该是每秒多次。这里我记录了它的调用。
即使屏幕上没有任何活动,为什么OnPreDraw()会一遍又一遍地被调用?这对性能有影响吗?我只希望在确实有东西需要绘制时才调用它。
如果有关系,view location_manager 是操作栏的一部分。
至少它正在做我想要的事情(在运行时居中我的视图),但为什么它一遍又一遍地这样做?我的理解是,它应该在视图树有东西可绘制时被调用,这不应该是每秒多次。这里我记录了它的调用。
即使屏幕上没有任何活动,为什么OnPreDraw()会一遍又一遍地被调用?这对性能有影响吗?我只希望在确实有东西需要绘制时才调用它。
如果有关系,view location_manager 是操作栏的一部分。
OneShotPreDrawListener
。
https://developer.android.com/reference/androidx/core/view/OneShotPreDrawListener
将这个改成:val viewTreeObserver = view.viewTreeObserver
val onPreDrawListener = object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
view.viewTreeObserver.removeOnPreDrawListener(this)
// do some thing
return false
}
}
viewTreeObserver.addOnPreDrawListener(onPreDrawListener)
to:
OneShotPreDrawListener.add(view) {
// do some thing
}
如果你只想让onPreDraw()
方法被调用一次,那么你需要在第一行中删除OnPreDrawListener
:
myView.getViewTreeObserver().removeOnPreDrawListener(this);
vto
必须声明为 final
。 - Blackbelt