web-dev-qa-db-fra.com

Toile Android changer la couleur de fond

Toile Android changer de couleur

J'ai une application avec deux vues

    <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" />

Ces vues se chevauchent et, pendant un certain temps, je charge des informations dans la vue de l'arrière-plan. Pendant ce temps, j'aimerais définir le FrontView en blanc, puis (lorsque le chargement de l'arrière-plan sera terminé) en transparent.

Dans le FrontView, j'ai un canevas avec un bitmap. Fonctionne, et je peux le faire si je veux définir un fond transparent

canvas.drawColor(0);

définir le fond en blanc

canvas.drawColor(-1);

Mais je ne peux pas changer de blanc pour transparent.

Je vous remercie

8
agusgambina

N’est pas ce que je voulais réaliser mais c’est une solution de contournement et peut-être utile pour quelqu'un, je mets en mode invisible le deuxième canevas, puis, quand il est prêt, je le remet 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

Essaye ça:

/*
* 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);

Ou, comme @ njzk2 l'a indiqué, vous pouvez également utiliser celui-ci:

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

Mais je pense que la première option est meilleure car elle est plus précise pour, par exemple, si vous voulez la rendre moins transparente.

15
h0ussni

Créer une peinture

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

Et place ta toile

canvas.draw...(... ,  myPaint);
5
rguerra