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).
- ¿Cómo se muestra un diálogo de alerta sólo en la primera ejecución de mi aplicación?
- Recyclerview con el interior scrollview anidado?
- ViewPager dentro de Fragmento no muestra a pesar de usar getChildFragmentManager () al construir FragmentPagerAdapter
- IllegalArgumentException Surface.nativeLockCanvas, Choreographer, BufferQueue
- ¿Cómo puedo colocar un diseño justo encima del teclado en pantalla de Android?
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.
- Analizador SAX obtener atributo de endelement
- Android AccountManager lanza AuthenticatorException: falla de enlace al agregar cuenta
- Objeto girado correspondiente a valores numéricos
- Cómo actualizar el Widget de la aplicación con la vista de lista de una actividad
- ¿Por qué el descifrado de AES java devuelve caracteres adicionales?
- Error al actualizar el inventario. Facturación en la aplicación
- Proporcionando datos de prueba para SharedPreferences para Robolectric
- Dibujable en Vista obteniendo aplastado
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ó
- ¿Qué hacer al intentar crear una aplicación de Android, y 'No Target Available'?
- Cortar, copiar y pegar en android