Android SurfaceHolder.unlockCanvasAndPost () no causa redibujo

Estoy implementando una aplicación bastante estándar con el sdk de Android que implica el dibujo utilizando el SurfaceView, SurfaceHolder, la configuración de devolución de llamada.

En mi hilo principal (hilo de interfaz de usuario) no tengo ningún dibujo o manejo de SurfaceHolder (o el lienzo que recuperar con él).

En un hilo separado tengo lo siguiente:

Log.i("GAME.DrawThread", "run()"); Log.i("GAME.DrawThread", Thread.currentThread().getName()); Canvas canvas = null; try { canvas = holder.lockCanvas(); synchronized(holder) { Log.i("GAME", "draw():synchronized"); Paint paint = new Paint(); paint.setColor(R.color.draw_color); canvas.drawColor(R.color.draw_color); canvas.drawLine(0, 0, 500, 500, paint); } } catch (SurfaceHolder.BadSurfaceTypeException e) { Log.e("GAME", "onDraw(): BadSurfaceTypeException"); } finally { if (canvas != null) { holder.unlockCanvasAndPost(canvas); } } 

Este código se está ejecutando, no arroja excepciones y no tiene efectos secundarios negativos que pueda encontrar; Sin embargo, la llamada unlockCanvasAndPost () nunca hace que onDraw () sea llamado.

En otras palabras, unlockCanvasAndPost () no causa un redibujo de SurfaceView.

¿Alguna idea de lo que podría causar este síntoma? Tengo un montón de experiencia java, una buena cantidad de experiencia androide, y una gran cantidad de depuración de la experiencia y no puede seguir este abajo.

Gracias por adelantado.

Así que resulta que cuando se utiliza SurfaceView se dibuja a una superficie que está debajo de una ventana. Estaba estableciendo el color de fondo de la Vista en xml; Resulta que establece el color de fondo de la ventana, no la superficie. En efecto, hice la ventana opaca para que no pudiera ver la superficie debajo.

Lección aprendida.

Eso no es cómo funciona SurfaceView. Llamar unlockCanvasAndPost () no invoca onDraw (), ese es el punto de usar un SurfaceView. La superficie de SurfaceView vive en una ventana diferente.

Esto es viejo, pero tengo la sensación de que el problema es que no hay devolución de llamada de superficie. Estaba tratando de dibujar en la superficie antes de que la superficie se creó

  • Envío de paquetes UDP desde ANDROID 2.2 (deseo de HTC)
  • Problemas con el tutorial de Parse (Android)
  • Obtener cumpleaños para cada contacto en la aplicación de Android
  • Serialización de Java - deserialización de Android
  • Convertir el número en doble
  • Convertir archivos pcm a mp3 usando liblame en android
  • Conjunto de subprocesos en Java
  • Cómo hacer en el artículo seleccionado no elegir automáticamente la primera entrada
  • La importación com.google.api.client no se puede resolver en Eclipse
  • No se puede encontrar la clase de símbolo Intent
  • Cómo devolver Java.Lang.Object de un método anulado en MonoDroid
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.