Lollipop 에서 비트맵에 틴트 칠하기
안드로이드 Lollipop 이상에서는 bitmap 마크업 언어를 통해서 비트맵에 틴트를 칠할 수 있다. 이 기능은 모든 drawable에서 동작하지는 않는다. 예를 들어 아래의 drawable_tint.xml와 같이 정의된 bitmap drawable에 다시 적용할 수 없다는 점이다. <bitmap android:src="@drawable/drawable_tint"/>
틴트
res/drawable/drawable_tint/xml
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@mipmap/ic_launcher"
android:tint="@color/colorAccent"
android:tintMode="multiply"
/>
틴트 모드
tint에 적절한 색상을 섞어 이미지에 색상을 오버레이 할 수 있다.
tintMode 속성에 관해서는 다음과 같이 정의되어 있다.
Constant | Value | Description |
---|---|---|
add | 10 | Combines the tint and drawable color and alpha channels, clamping the result to valid color values. Saturate(S + D) |
multiply | e | Multiplies the color and alpha channels of the drawable with those of the tint. [Sa * Da, Sc * Dc] |
screen | f | [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] |
src_atop | 9 | The tint is drawn above the drawable, but with the drawable’s alpha channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] |
src_in | 5 | The tint is masked by the alpha channel of the drawable. The drawable’s color channels are thrown out. [Sa * Da, Sc * Da] |
src_over | 3 | The tint is drawn on top of the drawable. [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] |
레이아웃
저자는 multiply tintMode에 관해서 API 별 색상 오버레이를 보여주기 위해서 다음과 같이 배치하였다.
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.tistory.whiteduck.tinttest.MainActivity">
<TextView
android:id="@+id/src_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="src" />
<ImageView
android:id="@+id/image_src"
android:layout_width="100dp"
android:layout_height="120dp"
android:layout_below="@id/src_text"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tint_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="tint"
android:layout_below="@id/image_src"/>
<ImageView
android:layout_width="100dp"
android:layout_height="120dp"
android:layout_below="@id/tint_text"
android:src="@drawable/drawable_tint"/>
</RelativeLayout>
결과
Android API level 19 - Kitket |
Android API level 21 - Lollipop |
Android API level 22 - Lollipop |
|
|
|
참조 : http://toastdroid.com/2014/12/06/tinting-drawables-on-lollipop/
반응형
'Android Story' 카테고리의 다른 글
[NDK] OpenSSL CrossCompile (2) | 2019.05.22 |
---|---|
[Android] Switch Custom (0) | 2019.01.15 |
[Android ] 안드로이드 UI 디자인, Framer (1) | 2017.12.22 |
[ Android ] JavaCV 연동 (0) | 2017.03.30 |
[ Android ] 줄번호 설정 (0) | 2017.01.13 |
[ Android ] FFmpeg Rtsp Player 사용하기 (12) | 2016.12.27 |
[ Android ] Network type (0) | 2016.12.19 |
[ Android ] FFplay 문서 번역 (0) | 2016.12.13 |