SurfaceView muestra pantalla en negro – Android
Básicamente quiero usar SurfaceView para la animación. Por lo tanto la clase implementa Runnable. Para experimentar, quiero dibujar un círculo. Sin embargo, sólo muestra una pantalla en negro.
He estado intentando por días. Realmente apreciar si alguien puede ayudar.
- Android, lienzo: ¿Cómo puedo borrar (eliminar contenidos de) un lienzo (= bitmaps), que viven en una surfaceView?
- Android: ¿Cómo hacer esta pintura enmarcada?
- La detección facial no detecta caras, Android
- Comprensión de los conceptos de lienzo y superficie
- El lienzo SurfaceView de Android produce colores incorrectos
Clase MainActivity
public class MainActivity extends Activity { private Bitmap Liquid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); DrawStripFrame D1 = new DrawStripFrame(this); setContentView(D1);
Clase DrawStripFrame
public class DrawStripFrame extends SurfaceView implements Runnable{ private SurfaceHolder holder; private boolean running = true; public DrawStripFrame (Context context){ super (context); holder = getHolder(); } @Override public void run(){ while(running){ if(holder.getSurface().isValid()){ Canvas c = holder.lockCanvas(); c.drawARGB(0, 0, 0, 0); Paint redPaint = new Paint(); redPaint.setColor(Color.RED); c.drawCircle(100, 100, 30, redPaint); holder.unlockCanvasAndPost(c); } } } }
- Cambio de lienzo de Android algunos píxeles de color
- Evite dibujar más allá del lienzo con SurfaceView
- Android: dibujo en un nuevo lienzo
- Obtención de mapa de bits desde SurfaceView personalizado
- Efecto de zoom en Android SurfaceView
- Buscar coordenadas exactas de un solo carácter dentro de un TextView
- Dibujar círculo mediante programación utilizando Android ShapeDrawable
- Múltiples rectángulos que no dibujan sobre lienzo
El problema se resuelve cambiando el bucle while así:
while(running){ if(!holder.getSurface().isValid()) continue; Canvas c = holder.lockCanvas(); c.drawARGB(0, 0, 0, 0); Paint redPaint = new Paint(); redPaint.setColor(Color.RED); c.drawCircle(100, 100, 30, redPaint); holder.unlockCanvasAndPost(c); }
La instrucción continue devuelve el control a la parte superior del bucle cuando la superficie no es válida. Sólo cuando la superficie sea válida, se ejecutará el bloque siguiente.
Yo tuve el mísmo problema. He probado mi APP en emuladores diferentes.
Esta era mi clase MainActivity
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private SurfaceViewTest test; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); test = new SurfaceViewTest(this); setContentView(test); } @Override protected void onResume() { super.onResume(); test.resume(); } }
SurfaceViewTest.java
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.view.SurfaceView; public class SurfaceViewTest extends SurfaceView implements Runnable { private Thread thread; volatile boolean running; public SurfaceViewTest(Context context) { super(context); } @Override public void run() { while(running) { draw(); } } private void draw(){ if(getHolder().getSurface().isValid()) { Canvas canvas = getHolder().lockCanvas(); canvas.drawColor(Color.argb(255, 255, 0, 0)); getHolder().unlockCanvasAndPost(canvas); } } public void resume() { running = true; thread = new Thread(this); thread.start(); } public void pause() { running = false; while (thread.isAlive()) { try { thread.join(100); if(thread.isAlive()) { thread.interrupt(); thread.join(); } } catch (InterruptedException e) { e.printStackTrace(); } } } }
Styles.xml
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowFullscreen">true</item> </style> <style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light"> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:background">#000000</item><!-- Remove it to fix the problem --> </style> </resources>
Lo solucioné quitando el fondo del artículo de styles.xml
<item name="android:background">#00000</item>
Parece un problema con el canal alfa.
- Cómo implementar la vista de búsqueda en la actividad (barra de acciones) cuando existe la vista de lista en el fragmento
- Cómo mostrar la selección del primer elemento en la vista de reciclador en android?