Nic*_*ler 49
您可以使用a GlobalLayoutListener来确定视图可见性是否有任何更改.
myView.setTag(myView.getVisibility());
myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int newVis = myView.getVisibility();
if((int)myView.getTag() != newVis)
{
myView.setTag(myView.getVisibility());
//visibility has changed
}
}
});
Run Code Online (Sandbox Code Playgroud)
Dev*_*inM 10
除了 @string.Empty 的解决方案之外,这是 Kotlin 的扩展实现。
fun View.visibilityChanged(action: (View) -> Unit) {
this.viewTreeObserver.addOnGlobalLayoutListener {
val newVis: Int = this.visibility
if (this.tag as Int? != newVis) {
this.tag = this.visibility
// visibility has changed
action(this)
}
}
}
Run Code Online (Sandbox Code Playgroud)
像这样实现它
myView.visibilityChanged { view ->
when (view.visibility) {
VISIBLE -> { /* Do something here */ }
GONE -> { /* or here */ }
}
}
Run Code Online (Sandbox Code Playgroud)