El lienzo de Android cambia de color

Tengo una aplicación con dos vistas

    <com.myexample.ui.view.BackgroundView
        android:id="@+id/id_draw_canvas_classroom"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="3dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="3dp"
        android:layout_weight="1"
        android:background="#FFFFFFFF" />

    <com.myexample.ui.view.FrontView
        android:id="@+id/id_draw_canvas_user"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="3dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="3dp"
        android:layout_weight="1"
        android:background="#00000000" />

Estas vistas se superponen y, durante un período de tiempo, cargo información en la vista de fondo. Durante ese tiempo, me gustaría configurar el FrontView en blanco, y luego (cuando el fondo termine de cargarse) se vuelva transparente.

En el FrontView tengo un lienzo con un mapa de bits. Está funcionando, y puedo hacer esto si quiero establecer el fondo en transparente

canvas.drawColor(0);

Establecer el fondo en blanco

canvas.drawColor(-1);

Pero no puedo cambiar el blanco por transparente.

Gracias

12
agusgambina 27 ene. 2015 a las 18:57

4 respuestas

La mejor respuesta

No es lo que quería lograr, pero es una solución alternativa y tal vez sea útil para alguien, estoy poniendo invisible el segundo lienzo, y luego, cuando esté listo, lo vuelvo a poner visible.

@Override
public void lock(String message) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            canvasFront.setReadyToDraw(false);
            canvasBackground.setVisibility(View.INVISIBLE);
        }
    });
}

@Override
public void unlock() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            drawViewClassroom.setVisibility(View.VISIBLE);
            canvasFront.setReadyToDraw(true);
        }
    });
}
1
agusgambina 27 ene. 2015 a las 18:36

Si desea cambiar el color de fondo de Canvas, intente esto:

canvas.drawColor(ContextCompat.getColor(getContext(), R.color.yourColor));
1
Kasper Franz 12 mar. 2019 a las 11:06

Crea una pintura

Paint myPaint = new Paint();
myPaint.setColor(res.getColor(R.color.white));

Y configura tu lienzo

canvas.draw...(... ,  myPaint);
6
rafaelasguerra 27 ene. 2015 a las 16:00

Prueba esto:

/*
* A = Alpha a.k.a. transparency
* R = Red color
* G = Green color
* B = Blue color
*
* All of them have a range from 0 to 255
*/
canvas.drawARGB(0, 225, 225, 255);

O, como dijo @ njzk2, también puede usar este:

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

Pero creo que la primera opción es mejor porque es más precisa, por ejemplo, si desea establecerla menos transparente.

19
27 ene. 2015 a las 16:18