Pregunta

He buscado durante bastantes horas y no han sido capaces de encontrar una concisa andswer definitiva a mi pregunta. Tengo una aplicación donde tengo que dibujar un campo de deportes (incluyendo todas las líneas de paso) a la pantalla. Hasta ahora, he ampliado la SurfaceView y prácticamente copiado el resto de la LunarLander demostración también. Todos los datos de la aplicación requiere para dibujar el terreno de juego con las dimensiones correctas se está recibiendo desde un enchufe que funciona muy bien también. Sin embargo, en el minuto en la función onDraw (), estoy dibujando todas las líneas de cada cuadro que está causando una tasa de fotogramas bastante lento en el emulador (por ejemplo, ~ 10 fps). Aquí es mi función onDraw ():

@Override
public void onDraw(Canvas canvas) {
canvas.drawARGB(255,0,144,0);
canvas.drawLine(canvas, getFirstLine(), mPaint);
canvas.drawRect(canvas, getFirstRect(), mPaint);
canvas.drawRect(canvas, getSecondRect(), mPaint);
...
canvas.drawRect(canvas, getSecondRect(), mPaint);
drawAnimatedObjects();
}

Entonces dibujar círculos y diferentes posiciones sobre este fondo. Mi pregunta es ¿cómo puedo hacer esto más eficiente? ¿Hay una manera que puedo dibujar las líneas en la inicialización de aplicaciones y no tener que volver a dibujar cada fotograma ellos?

Gracias por cualquier ayuda.

¿Fue útil?

Solución

definitivamente debe ser el almacenamiento en caché cualquier dibujo de la lona que no va a cambiar a un mapa de bits en tiempo de inicialización y luego dibujar ese mapa de bits en onDraw (). Eso ayudará a los tiempos de render mucho. Algo así como:

Bitmap mField = null;

void init()
{
  mField = new Bitmap(...dimensions...);
  Canvas c = new Canvas(mField);
  c.drawRect(...);
  ...
}

void onDraw(Canvas c)
{
  c.drawBitmap(mField);
}

Otros consejos

Es el campo de deportes estática o no es de desplazamiento por la pantalla? Si es estática, se debe considerar la construcción de una vez y guardarlo como una imagen que vuelve a dibujar lo que será cada vez. Otra cosa: El emulador es muy lento en comparación con los dispositivos modernos. Debe revisar su desempeño al menos en un G1 o posterior para verificar el rendimiento real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top