2015-12-03 6 views
1

Я пытаюсь создать анимированные обои.Как сделать canvas.drawBitmap прозрачным?

В основном мои обои имеют некоторое фоновое изображение и несколько изображений на переднем плане. Я хочу поменять местами фотографии переднего плана с разными фонами.

У меня есть метод Draw, который выглядит следующим образом:

protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     canvas.drawColor(0); 
     canvas.drawBitmap(background,0,0,null); 

     canvas.drawBitmap(foreground,x,y,null); 
     canvas.save(); 

} 

Моя картина переднего плана является PNG, который имеет много прозрачного пространства.

Я загрузил в моем переднем плане картины, как это:

foreground=decodeSampledBitmapFromResource(getResources(), R.drawable.c1, 440,320); 

Если метод decodeSampledBitmapFromResource был взят из учебника здесь: https://developer.android.com/training/displaying-bitmaps/load-bitmap.html

Моя проблема заключается в том, что на переднем плане будет отображаться белым цветом, где он должен отображать прозрачный цвет и, таким образом, покрывающий фон уродливым белым прямоугольником.

Мне интересно, есть ли у кого-нибудь советы, чтобы я сделал это прозрачным. Я пробовал настройки options.inPreferredConfig = Bitmap.Config.ARGB_8888; для BitmapFactory, но это не помогло.

ответ

0
Paint paint = new Paint(); 
paint.setAlpha(70); // you can change number to change the transparency level 
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.someDrawable); 
canvas.drawBitmap(image, x, y, paint); 
+0

Спасибо за ваш ответ, Я действительно пробовал это раньше. SetAlpha установит всю прозрачность изображения. Я хочу, чтобы прозрачная часть изображения была прозрачной, а непрозрачная часть изображения не была прозрачной. – txtcoder

0

Вы должны использовать Paint и установите режим смешивания на SRC_OVER

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Paint paint = new Paint(); 
    canvas.drawColor(0); 
    canvas.drawBitmap(background,srcRect,dstRect,paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); 
    canvas.drawBitmap(foreground,srcRect2,dstRect2,paint); 
    canvas.save(); 
} 

См PorterDuff.Mode для различных вариантов смешивания (там много ...)

Смежные вопросы