Android2013. 6. 13. 20:34

Drawable에 Image(bitmap)를 가져와서 지정해주고 colorFilter를 지정해 주면 bitmap에 ColorFilter가 적용된 Drawable을 이용하여 view에 배경을 지정해 줄 수 있습니다.

보통의 경우

BitmapDrawable bd = new BitmapDrawable(bitmap);
view.setBackgroundDrawable(bd );


위와 같이 적용하면 되는데
아래와 같이 stateDrawable을 사용하여 배경을 지정해 주게 되면 ColorFilter가 적용되지 않은 원본 bitmap 배경이 지정되는 문제가 생깁니다.

BitmapDrawable bd = new BitmapDrawable(bitmap);
StateListDrawable stateDrawable = new StateListDrawable();
stateDrawable.addState(new int[]{-android.R.attr.state_pressed}, bd);
view.setBackgroundDrawable(stateDrawable); 

그러하여 위와 같은 문제를 해결하기 위해서

Bitmap orgBitmap = getResources().getDrawable(id);
paint = new Paint();
Bitmap copyBitmap = Bitmap.createBitmap(orgBitmap.getWidth(), orgBitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(copyBitmap);
canvas.drawBitmap(orgBitmap, 0, 0, paint);
BitmapDrawable bd = new BitmapDrawable(copyBitmap);
StateListDrawable stateDrawable = new StateListDrawable();
stateDrawable.addState(new int[]{-android.R.attr.state_pressed}, bd);
view.setBackgroundDrawable(stateDrawable);

위와 같이 ColorFilter를 적용하여 새로 만든 Bitmap에 그리고 StateListDrawable에 새로 만든 bitmap을 지정한 Drawable을 적용하게 되면 StateListDrawable을 사용하게 되도 ColorFilter가 적용된 배경이 보여지게 됩니다.

 

 

Posted by 위푸