본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Tinting drawables

by 돼지왕 왕돼지 2017. 9. 15.
반응형

 [android] Tinting drawables


http://andraskindler.com/blog/2015/tinting_drawables/

ALPHA, apk size, bitmapdrawable, drawable, drawablecompat, iNT, lightingcolorfilter, Los, paint, setcolorfilter, support library, Theme, tint, tintedbitmapdrawable, tinting, tinting drawable, V4, wrap, [android] 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);




반응형

댓글