[android] ripple mask 의 정체를 알아보자.. |
https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html
-
Ripple(잔물결, 파도) 에 대해 공부하고 있는데 약간 헷갈리는 개념이 있다. 바로 요 녀석. 마스크이다.
<ripple android:color="#ffff0000">
<item android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
-
우선 xml 을 간단히 해부해보면, ripple 에 지정되는 color 값이 바로 실제 ripple effect 의 색상 값이다.
그리고 ripple 아래 정의된 item 이라는 녀석이 ripple 이 없을 때 background 로 그려지는 drawable 에 해당한다.
위의 예제에서는 기본적으로 white 색상이 view의 background 로 차게 되고, 빨간색 ripple 이 발생한다.
-
case 를 통해 차이를 알아보자.
<ripple android:color="#ffff0000" />
item 항목이 없는 녀석은 unbound ripple 이다. 즉 적용한 view 의 boundary 를 벗어나는 ripple effect 가 발생한다.
<ripple android:color="#ff00ff00">
<item android:drawable="@android:color/black" />
</ripple>
mask 가 없는 이 녀석은 black background 위에 green ripple effect 가 발생한다.
mask 가 없는 경우 child layer 들의 composition 위에 ripple effect 가 발생한다. 즉 child 가 그려진 영역이 ripple 의 boundary 이다.
위의 경우 색상만 지정했고, 기본 view 가 rectangle 이므로 rectangle 영역이 ripple boundary 이다.
child layer 가 원형인 경우 원형에 대한 리플이 발생한다.
( oval 에 대해 발생하지 않는 이슈가 있다고 하는데, 이는 하단의 "Ripple 기본" 글을 참조해보자 )
<ripple android:color="#ffff0000">
<item android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
mask 가 있는 이 녀석은 child layer 의 조합이 아닌 mask 로 정의한 layer 에 대해 ripple effect 가 발생한다.
위 예제는 drawable 이 color 값으로 되어 있고, 일반 view 는 rectangle 이기 떄문에 "opaque rectangle" 모양으로 ripple 이 발생한다.
-
정리하면, 일단 "item" tag 가 들어가 있어야 bounded ripple 을 한다.
mask 없이 child layer 가 있는 경우 child layer 의 boundary로 ripple 이 발생한다.
child layer 의 boundary 로 ripple 하고 싶지 않다면, mask 를 지정해서 ripple 의 boundary 를 정해주면 된다.
Ripple 기본 : [android] Ripple 에 대해 알아보자
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android 보안] 안드로이드 보안 모델 #2 (0) | 2018.04.15 |
---|---|
[android 보안] 안드로이드 보안 모델 #1 (0) | 2018.04.14 |
[android] Ripple 에 대해 알아보자 (0) | 2018.03.30 |
Efficient Android Threading #12 로더를 이용한 자동 백그라운드 실행 (0) | 2018.03.28 |
Efficient Android Threading #11 AsyncQueryHandler 를 이용한 콘텐트 프로바이더 접근 (0) | 2018.03.27 |
댓글