para - manual de programacion android pdf
¿Sobrescribir onDraw() o draw()? (6)
Mi proyecto se basa en surfaceView y hasta ahora he tenido toda mi representación en onDraw, que estoy anulando. Todo parecía estar bien.
Sin embargo, acabo de actualizar mi SDK y ahora me da un error que me dice:
Método sospechoso de llamada; probablemente debería llamar "draw" en lugar de "onDraw"
¿Podría alguien explicar la diferencia entre estos dos?
He leído algunas preguntas similares en la red, pero no he encontrado una explicación que entiendo.
Gracias
Como dijo friiky, @SuppressLint("WrongCall")
solucionó mi problema. Sin embargo, debe estar delante del nombre del método, no del anterior.
Lo que hice fue colocar el mouse sobre el código de error, hacer clic con el botón derecho y seleccionar Add @SuppressLint("WrongCall")
Intenté limpiar mi proyecto y resolví el problema. Intentalo.
Tenga en cuenta que en el caso de dibujar, anular dibujar () y llamar a super.draw se utiliza a menudo cuando un Grupo de vistas quiere dibujar contenido sobre sus vistas secundarias. El contenido dibujado en onDraw aparecerá debajo de los niños.
Tengo el problema desde siempre.
Lo manejo de esta manera:
1) Declara un método como el siguiente.
@SuppressLint("WrongCall")
public void drawTheView() {
theCanvas = null;
try{
theCanvas = getHolder().lockCanvas();
if(theCanvas != null) {
onDraw(theCanvas);
}
} finally {
getHolder().unlockCanvasAndPost(theCanvas);
}
}
2) Ahora puedes modificar el método onDraw ():
@Override
public void onDraw(Canvas canvas) {
//Do some drawing
}
Puede llamar al método drawTheView () desde cualquier lugar que desee y llamar al método onDraw () de esta manera sin recibir el error ...
Creo que esta es una forma práctica.
SurfaceView.draw() básicamente llama a View.draw(); Si desea implementar su dibujo, debe hacerlo en View.onDraw() que es para que usted lo implemente, lo que incluso dice en los comentarios del código fuente.
ViewGroup.drawChild () llama a este método para que cada vista secundaria se dibuje. Este método draw () es un detalle de implementación y no está diseñado para ser anulado o para ser llamado desde otro lugar que no sea ViewGroup.drawChild ().
En cuanto a la diferencia entre ellos:
dibujar():
13416 /*
13417 * Draw traversal performs several drawing steps which must be executed
13418 * in the appropriate order:
13419 *
13420 * 1. Draw the background
13421 * 2. If necessary, save the canvas'' layers to prepare for fading
13422 * 3. Draw view''s content
13423 * 4. Draw children
13424 * 5. If necessary, draw the fading edges and restore layers
13425 * 6. Draw decorations (scrollbars for instance)
13426 */
onDraw () está vacío. Es para que usted lo implemente.
onDraw
te da un lienzo para dibujar en la pantalla.
draw()
permite dibujar manualmente un lienzo en la pantalla (usted mismo debe hacer el lienzo).