OnDraw Vista personalizada dentro de un Scrollview

Tengo una vista de encargo (anchura = 2000) dentro de una vista de desplazamiento horizontal (anchura = 480). Así que hay una región que se puede desplazar.

Cuando se llama onDraw() , el rectángulo sucio (devuelto por getClipBounds() ) devuelve las dimensiones de toda la vista, así que dibujo la vista completa incluyendo el área que no está visible. Como consecuencia, cuando hago scroll, onDraw() ya no se llama, porque las áreas que se hacen visibles ya estaban dibujadas y de alguna manera recordadas.

 public void onDraw(Canvas canvas) { canvas.getClipBounds(r); // returns 2000 x 400 } 

Esto funciona bien!
Sin embargo, mi vista personalizada puede ser tan amplia como 20.000 o más, y las cosas empiezan a ser lentas. Mi preocupación es que el dibujo en caché utiliza una gran cantidad de memoria. No creo que el dibujo se esté guardando como mapa de bits ya que ya se habría estrellado, ¿cómo se guardan estos comandos de dibujo (líneas y texto, en su mayoría)? ¿Hay una manera de especificar que onDraw() sólo debe solicitar la parte visible de la vista, y al desplazarse sigue llamando onDraw() ? ¿O hay algún otro enfoque?

¡Gracias!

Android utiliza hardware acelerado "listas de visualización" para el dibujo desde Android 3.0. Esto hace que la lista de visualización de toda la vista se almacene en caché.

Si la vista dentro de ScrollView es realmente grande, puede desactivar la aceleración de hardware para la vista.

Hacemos esto subclasificando ScrollView y reemplazando el método onAttachedToWindow() con esto:

 @Override protected void onAttachedToWindow() { setLayerType(LAYER_TYPE_SOFTWARE, null); } 
  • Onclick en paginador de vista en android no funciona en mi código
  • ¿Cómo puedo ver que View se vuelve visible
  • ¿Cómo obtener la vista raíz de la aplicación Android de React Native?
  • Android doble lista de correo expandible oculta los elementos si la lista es demasiado grande
  • SurfaceView en ScrollView en 4.1
  • Android Studio 2.2.0.12 diseñador automáticamente anuncios "@ + id" prefijo antes de la identificación de la vista y que causa este error inusual
  • ¿Cómo funciona el método baseAdapter notifyDataSetChanged de android?
  • Selección de niños en ExpandableListView
  • ¿Cómo hacer una pausa de la rotación de la lona durante 2 segundos en ángulos específicos?
  • Android: ¿Cómo pasar mejor los datos a una vista?
  • Ampliar / reducir en webview android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.