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

[android] ripple mask 의 정체를 알아보자..

by 돼지왕 왕돼지 2018. 3. 31.
반응형

[android] ripple mask 의 정체를 알아보자..


https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html

android ripple mask, android:id/mask, child layer, drawble, id/mask, Mask, ripple boundary, ripple color, Ripple Effect, ripple item, ripple mask, unbound ripple, xml, [android] ripple mask 의 정체를 알아보자.., 잔물결, 파도

-

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 를 정해주면 된다.





반응형

댓글