Je souhaite vérifier si une View
dans une ScrollView
est actuellement visible dans Android. Je ne vérifie pas si elle est encore active, mais si elle est actuellement affichée à l'écran. Existe-t-il une méthode dans View
qui peut me dire si la vue est actuellement visible?
Ce code fonctionne pour moi:
public static boolean isVisible(final View view) {
if (view == null) {
return false;
}
if (!view.isShown()) {
return false;
}
final Rect actualPosition = new Rect();
view.getGlobalVisibleRect(actualPosition);
final Rect screen = new Rect(0, 0, getScreenWidth(), getScreenHeight());
return actualPosition.intersect(screen);
}
int[] location = new int[2];
view.getLocationOnScreen(location);
ou
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
Utilisez maintenant cet emplacement ou ce rectangle pour vérifier s'il se trouve ou non dans vos limites visibles. S'il s'agit simplement de la totalité de l'écran, vérifiez par rapport à getResources().getDisplayMetrics()
.
Comme l'a souligné Antek dans les commentaires ci-dessous, la vue peut toujours être disparue ou invisible, les valeurs renvoyées indiquant ici où elle a été dessinée. Donc, la combinaison de la condition liée aux limites ci-dessus avec une view.isShown()
ou une view.getVisibility() == VISIBLE
devrait en tenir compte.
essayer
if(view.isShown()) {
// Visible
} else {
// Invisible
}