¿Necesito volver a llamar a super.onDraw () en una vista personalizada?

No estoy muy claro acerca de esto y tampoco son los documentos.

Cuando estoy creando una vista personalizada, reemplazo así:

@Override public void onDraw(Canvas canvas) { super.onDraw(canvas); //more code here... } 

Mi pregunta es si es necesario llamar a super.onDraw(canvas); . El código parece funcionar bien sin él, pero quiero estar seguro de que está bien dejarlo.

¿Así que es necesario?

Si desea que llame al método onDraw de la superclase (piense en TextView o KeyboardView en lugar de una vista genérica), entonces llame a super.onDraw. Si no quieres eso, es decir, estás planeando dibujar toda la vista tú mismo (que parece que eres), no hay razón para llamarla.

Además, si estás extendiendo View (y no alguna clase que extiende la vista), super.onDraw realmente no hace nada.

Para mí, llamo a super.onDraw cuando quiero dibujar líneas sobre un KeyboardView. Así, super.onDraw dibuja el teclado, y mi personalizado LatinKeyboardView (que extiende KeyboardView) dibuja la ruta de deslizamiento en la parte superior del teclado.

Un vistazo al código fuente muestra que View.onDraw() es un método vacío. Por lo tanto, llamar a super.onDraw() , si la clase padre es View sí mismo, no hace nada. Es innecesario pero inofensivo.

Si usted debe ir adelante y lo hace de todos modos es una pregunta separada de la eficacia, de la seguridad, y del estilo.

Sí lo es. Si se personaliza un TextView, el super.onDraw se asegurará de dibujar lo que pertenezca a los atributos de TextView (como el texto, color de texto, sombra de texto, etc …) Lo mismo con otras vistas como Button, CheckBox …

En caso de que su vista personalizada extienda View (no una subclase específica de View, sólo View), todavía es mejor dejar super.onDraw (lienzo) allí para algunos métodos de Draw de View (como setBackgroundDrawable, etc …)

No es necesario a menos que esté realmente sobreescribiendo el método onDraw() . Si la nueva clase no lo anula, el método del super se llamará automáticamente.

  • ¿Necesito los tres constructores para una vista personalizada de Android?
  • Vista elíptica en Android
  • Llene el gráfico sinusoidal de Android
  • Editado: Android Dibuja la imagen de la aguja en este círculo similar al medidor
  • ¿Cómo se utiliza el parámetro defStyleAttrs en obtenidoStyledAttributes?
  • Deslizar / arrastrar la vista de Android desde la parte inferior de la pantalla
  • ImageViews son invisibles si el método dispatchDraw de Viewgroups se sobrescribe en android
  • Pantalla personalizada con líneas de puntos
  • Android dibujar círculo con 2 colores (gráfico circular)
  • Android - Canvas.clipRect () - Eliminar el clip existente
  • CastClassException en vista personalizada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.