2015-01-27 21 views
6

Android zmiana płótno kolorAndroid płótno zmiana koloru tła

Mam app z dwóch widoków

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

Te poglądy są w kryciu, a podczas okresu czasu załadować informacji w świetle tle . W tym czasie chciałbym ustawić FrontView na biały, a następnie (gdy ładowanie zakończy się w tle) zmieni się w przezroczysty.

W FrontView mam płótno z bitmapą. Pracuje, a ja jestem w stanie to zrobić, jeśli chcę ustawić tło w przejrzystej

canvas.drawColor(0); 

ustawić tło w kolorze białym

canvas.drawColor(-1); 

Ale nie jestem w stanie zmienić na biały przezroczysty.

Dziękuję

+0

używać stałych 'Color.TRANSPARENT' i' Color.WHITE'. Zobacz także odpowiedź: http://stackoverflow.com/a/10882301/671543 – njzk2

Odpowiedz

0

nie to, co chciałem osiągnąć, ale jest to obejście, a może to pomocne dla kogoś, kładę się niewidzialny na sekundę płótno, a kiedy jest gotowe, pokazuję je z powrotem.

@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); 
     } 
    }); 
} 
12

Spróbuj tego:

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

Albo, jak @ njzk2 wspomniano, można również korzystać z tego jeden:

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

Ale myślę, że pierwsza opcja jest lepsza, ponieważ jest bardziej precyzyjny, na przykład, jeśli chcesz ustawić go mniej przejrzysty.

+0

dziękuję za odpowiedź, prawie działa, ale problem jest większy niż wtedy, gdy widok w tle ładuje informacje, przynosi widok tła do przodu. Właśnie to sobie uświadomiłem. – agusgambina

+0

@agusgambina Możesz wywołać 'bringToFront()' w widoku, który chcesz wyświetlić u góry. – Houssni

+0

dziękuję. Używam bringToFront() problem polega na tym, że nie wiem, dlaczego przynosi "drugie płótno" na pierwszy plan, kiedy tego nie chcę. – agusgambina

4

Tworzenie farby

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

i ustawić płótno

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