web-dev-qa-db-fra.com

Comment savoir si une vue est visible à l'écran dans Android?

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?

29
user1847544

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);
}
17
zegee29
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.

14
AA_PV

essayer 

if(view.isShown()) {
    // Visible
} else { 
    // Invisible
}
1
Rohit Suthar