안드로이드 하위 버전 즉, API Level 11 이전에서는 ColorDrawable의 getColor 함수가 지원되지 않습니다. Color에 대한 Drawable인 ColorDrawable에서 getColor가 지원되지 않는다는 것이 참으로 이상하지만 여하튼 API Level 11에서는 지원하지 않습니다. API Level 11 이전이라면 안드로이드 2.0 버전대입니다. 진저브레드였던가..
이리하여 ColorDrawable 클래스의 getColor를 사용할 경우 진저브레드와 같은 단말기는 지원할 수 없습니다. 그렇다면 진저브레드와 같이 API Level 11 이전의 단말기도 지원하면서 ColorDrawable의 getColor를 대체할 수 있는 함수는 어떻게 될까요?
쉬울것 같지만, 그 방법을 좀처럼 찾을 수 없었는데.. 편법이지만 명확한 방법을 공유합니다. 바로 그려보고 직접 확인해 보는 방식인데요. ColorDrawable은 Canvas에 무엇가를 그릴 수 있으므로 직접 그려보고 그린 내용을 확인한다는 것입니다. 즉, Bitmap에 그려보고 Bitmap의 Pixel 값을 가져오면, 바로 그 값이 우리가 원하는 값입니다. 코드는 다음과 같습니다.
int getColor(ColorDrawable cb) { Bitmap bitmap = Bitmap.createBitmap(1, 1, Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); cb.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); cb.draw(canvas); int clr = bitmap.getPixel(0, 0); bitmap.recycle(); return clr; }
어차피 그리기만 하면 되므로 비트맵의 크기는 1×1로 하였습니다. 그리고 투명도에 대한 알파값까지 고려하기 위해서 비트맵의 색상 포맷은 ARGB_8888, 즉 32Bits로 하였습니다. 색상값 하나를 얻기 위해 비트맵까지 생성해야 하는 방법까지 동원해야 한다는 점이 걸리기는 하지만 성공적으로 잘 됩니다.