전경 이미지의 특정 영역을 투명하게 설정하여 뒤에 있는 배경 이미지가 보이도록 동적으로 설정하는 예
사용된 배경 이미지(background.jpg) 사용된 전경 이미지(wall.png)
예제 실행 결과 전경 이미지의 특정 부분에 Alpha Mask 가 설정/투명하게 처리되어 배경 이미지가 보이게 된다.
SurfaceView.onDraw() 의 내용 및 소스코드
@Override
protected void onDraw(Canvas canvas) {
Bitmap background = BitmapFactory.decodeResource(getResources(),R.drawable.background);
Bitmap wall = BitmapFactory.decodeResource(getResources(),R.drawable.wall);
Bitmap mask = null;
// 전경 이미지와 동일 크기의 mutable 이미지 생성, 전경 이미지의 바탕으로 사용됨
Bitmap result = Bitmap.createBitmap(wall .getWidth(), wall .getHeight(), Bitmap.Config.ARGB_8888);
canvas.drawBitmap(background, 0, 0, null); // 전체화면의 배경을 그림
// 동적으로 마스킹 이미지를 생성하고 그리는 예
// 전경 이미지와 동일한 크기의 알파 마스크 이미지를 생성하고 흰색을 채워 투명영역 설정함
mask = Bitmap.createBitmap(wall .getWidth(), wall .getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvasForMask = new Canvas(mask);
Paint paint1 = new Paint();
paint1.setAntiAlias(true);
paint1.setARGB(255, 255, 255, 255);
canvasForMask.drawCircle(200, 0, 40, paint1);//흰색으로 그려주는 곳은 투명하게 되어 배경이 보이게 될 영역이다
Canvas c = new Canvas(result);
//c.setBitmap(result);
c.drawBitmap(wall, 0, 0, null); // 전경의 바탕 위에 이미지에 전경 이미지 그림
Paint paint2 = new Paint();
paint2.setFilterBitmap(false);
paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT) );
c.drawBitmap(mask, 0, 0, paint2); // 전경 이미지 위에 마스크 이미지 그림
paint2.setXfermode(null);
canvas.drawBitmap(result, 0, 84, null); // 배경 위에 완성된 전경 이미지를 그림
}