Quiero comprobar si un View dentro de un ScrollView es visible actualmente en Android. No estoy comprobando si es enfocado, pero si es que se muestra actualmente en la pantalla. Hay un método en View que me pueda decir si la vista es actualmente visible?

InformationsquelleAutor user1847544 | 2012-12-26

5 Comentarios

  1. 23

    Este código me funciona:

    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);
    }
  2. 15
    int[] location = new int[2];
    view.getLocationOnScreen(location);

    o

    Rect rect = new Rect();
    view.getGlobalVisibleRect(rect);

    Ahora uso esta ubicación o rectángulo para comprobar si está en su visibles los límites o no. Si se trata simplemente de la totalidad de la pantalla, compruebe en contra de getResources().getDisplayMetrics().

    Tal y como señala en Antek en los comentarios de abajo, la vista todavía puede estar ausente o invisible con los valores devueltos aquí diciendo que era el último dibujado. Así que la combinación de los anteriores límites de condición relacionada con un view.isShown() o view.getVisibility() == VISIBLE debe tener cuidado de que.

    • esto no funciona cuando alternar la visibilidad – si su punto de vista fue inicialmente visible, conservará su visible rect dimensiones.
    • Usted puede agregar una comprobación de vista de la visibilidad
    • ¿a qué te refieres? La vista tiene ahora visibility = GONE (acabo de tensado, se había visibility = VISIBLE), sin embargo, el rectángulo visible sigue siendo lo que era cuando la vista se creó. No hay necesidad de verificar, como me puse yo mismo en un lugar en el código.
    • Quiero decir, dependiendo de la intención, usted puede agregar la comprobación para ver.getVisibility() == VISIBLE, junto con la posición devuelta en la pantalla. Para la pregunta en realidad tendría sentido añadir, voy a editar la respuesta. Gracias
    • Sería interesante hacer la prueba si usted está trabajando en torno a este – ¿qué sucede cuando la vista se dibuja, luego hizo IDO, nunca se dibuja de nuevo? Me imaginaba IDO sería actualización de la ubicación, pero si no es digno de la comprobación, si nos quedamos con un rancio ubicación en adelante. Gracias!
    • cambiar la visibilidad a IDO no cambiar la ubicación, en realidad – para mi caso en particular es 0,0 de cualquier manera (vista a pantalla completa de grupo)
    • y en realidad solo voy a esperar un poco (100 ms?) en el subproceso de fondo, porque me di cuenta de que no tengo necesidad de revisar de forma explícita a la vista están elaborando o no – el problema es (probablemente) causada por llamar a este fragmento de código muchas veces en un segundo de otro lugar.
    • 0,0! Cualquiera de las maneras, mi edición tiene una invisible a la vista 😛
    • bien, a mi entender, es que por location que significó la esquina superior izquierda de la vista (que puede tener algunas dimensiones), por lo que cualquier punto de vista se encuentra allí, independientemente de su tamaño, se han dicho lugar.
    • yep… trate de conseguir el visible Rect lugar en su caso
    • a qué te refieres boundingBox?

  3. -1

    intentar

    if(view.isShown()) {
        //Visible
    } else { 
        //Invisible
    }
    • Este será el caso si, por ejemplo, hay una superposición de la oclusión de la View así que no es fiable, ni la respuesta correcta
    • Esto es incorrecto. los suyos() devuelve la propiedad de visibilidad de la Vista.
    • ¿Por qué este tiene varias upvotes? Está mal de la gente!
  4. -13

    La getVisibility() método le ayudará a controlar la visibilidad de cualquier View.

    Ejemplo:

    if(view.getVisibility() == View.VISIBLE) {
        //Visible
    } else { 
        //Invisible
    }
  5. -17

    La función de la Vista.getVisibility() puede tener los siguientes valores:

    • Vista.VISIBLE (0): la vista es visible.

    • Vista.INVISIBLE (1): La vista es invisible, pero todavía tiene espacio para propósitos de diseño.

    • Vista.IDO (2): el punto de vista se ha ido. Completamente oculto, como si la vista no había sido añadido

    Se puede ver a continuación enlace para obtener más información.
    ¿Cómo puedo comprobar si un punto de vista es visible o no en Android?

    • ¿Por qué no dar crédito a la respuesta original? stackoverflow.com/a/3791698/562935
    • esta respuesta es completamente equivocado! él quiere saber ver es visibile ahora en la pantalla o no! atributo de visibilidad siempre regreso visible si usted no lo cambia. este atributo no está relacionado con el desplazamiento,sólo se modifica por el programador.
    • Por cierto, las constantes para el visible, invisible y se han ido 0,4 y 8, respectivamente.
    • Estoy de acuerdo en la respuesta a esto es completamente erróneo.

Dejar respuesta

Please enter your comment!
Please enter your name here