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가 적용된 배경이 보여지게 됩니다.