Manejar un cambio de visibilidad de la vista sin anular la vista

¿Hay una manera de manejar un cambio de visibilidad de la vista (por ejemplo, de GONE a VISIBLE) sin anular la vista?

Algo como View.setOnVisibilityChangeListener(); ?

Puede utilizar un GlobalLayoutListener para determinar si hay cambios en la visibilidad de las vistas.

 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 } } }); 

En lugar de subclases puede utilizar la decoración:

 class WatchedView { static class Listener { void onVisibilityChanged(int visibility); } private View v; private Listener listener; WatchedView(View v) { this.v = v; } void setListener(Listener l) { this.listener = l; } public setVisibility(int visibility) { v.setVisibility(visibility); if(listener != null) { listener.onVisibilityChanged(visibility); } } } 

Entonces

  WatchedView v = new WatchedView(findViewById(R.id.myview)); v.setListener(this); 

Eche un vistazo a ViewTreeObserver.OnGlobalLayoutListener . Como se escribe en la documentación, su método de devolución de llamada onGlobalLayout() se invoca cuando cambia el estado del diseño global o la visibilidad de las vistas dentro del árbol de vista. Así que puede intentar utilizarlo para detectar cuándo cambia la visibilidad de la vista.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.