[android] Tinting drawables |
http://andraskindler.com/blog/2015/tinting_drawables/
-
Tinting drawable 은 현재의 theme 에 맞춘 drawable 을 만들 때 유용하게 사용할 수 있다.
apk size 도 줄일 수 있는 장점이 있다.
-
v4 support library 에 DrawableCompat 이라는 class 가 있다.
이 녀석은 원래 LOS 이상에서 가능한 tinting (색깔 입히기, 물들이기) 기능을 활용할 수 있게 한다.
그러나 이 녀석은 아직도 wrap() 라는 함수를 통해 wrap 해주어야 하는 단점이 있다.
그래서 TintedBitmapDrawable 을 구현해서 사용하는 것이 추천된다.
-
TintedBitmapDrawable 의 코드는 아래와 같다.
public final class TintedBitmapDrawable extends BitmapDrawable {
private int tint;
private int alpha;
public TintedBitmapDrawable(final Resources res, final Bitmap bitmap, final int tint) {
super(res, bitmap);
this.tint = tint;
this.alpha = Color.alpha(tint);
}
public TintedBitmapDrawable(final Resources res, final int resId, final int tint) {
super(res, BitmapFactory.decodeResource(res, resId));
this.tint = tint;
this.alpha = Color.alpha(tint);
}
public void setTint(final int tint) {
this.tint = tint;
this.alpha = Color.alpha(tint);
}
@Override public void draw(final Canvas canvas) {
final Paint paint = getPaint();
if (paint.getColorFilter() == null) {
paint.setColorFilter(new LightingColorFilter(tint, 0));
paint.setAlpha(alpha);
}
super.draw(canvas);
}
}
-
사용법은 아래와 같다.
tintedDrawable = new TintedBitmapDrawable(resources, R.drawable.test_img, Color.GREEN);
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Doze 모드와 App standby 모드 + GCM High priority message (2) | 2017.09.17 |
---|---|
[android] Percent Support Library (0) | 2017.09.16 |
[android] 배경 딤처리하기 (0) | 2017.09.06 |
[android] VSYNC & Choreographer - Butter Project (1) | 2017.09.05 |
[android] MOS 에서는 ACTION_IMAGE_CAPTURE 에도 Camera permission 이 필요하다. (0) | 2017.09.04 |
댓글