¿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í:
- Rectángulo efecto de rizo sin límites
- Llamado al método onDraw () de una vista personalizada en Android
- Restaurar estado de vista antes de aplicar atributos XML
- Android AlertDialog reglas setView
- SherlockActionBar: Cómo ajustar CustomView contra actionBar
@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?
- No se encontró ningún identificador de recurso para el atributo '' in package 'com.app ...'
- Establecer valor de enum en xml del recurso
- Soltar sombra para un ViewPager
- Cómo leer atributos personalizados en Android
- Canvas.drawArc () artefactos
- ¿Debo llamar a super () o llamar a esto () para los constructores de vista personalizada de Android?
- Barra de herramientas extendida con vista personalizada que no se muestra con ancho completo
- Mapa de bits no dibujado anti-alias
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.