Android Story

[ Android ] 틴트(오버레이) 색상 지정하기

WhiteDuck 2017. 3. 28. 13:24

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 속성에 관해서는 다음과 같이 정의되어 있다.

ConstantValueDescription
add10Combines the tint and drawable color and alpha channels, clamping the result to valid color values. Saturate(S + D)
multiplyeMultiplies the color and alpha channels of the drawable with those of the tint. [Sa * Da, Sc * Dc]
screenf[Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
src_atop9The tint is drawn above the drawable, but with the drawable’s alpha channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc]
src_in5The tint is masked by the alpha channel of the drawable. The drawable’s color channels are thrown out. [Sa * Da, Sc * Da]
src_over3The 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