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

[android] Render thread & Ripple ( Ripple 흉내내기 )

by 돼지왕 왕돼지 2016. 9. 8.
반응형

 [android] Render thread & Ripple ( Ripple 흉내내기 )


activity inflating, Android, animation, anr, api 21, atomic animation, COLOR, enterFadeDuration, exitFadeDuration, GENERAL, heavy job, inflating, ITEM, lollipop, Los, main thread, Open source, Oval, pre api 21, render thread, rendering, Ripple, Ripple Effect, selector, Shape, shape selector, Solid, state_pressed, UI Thread, view operation, xml, [android] Render thread & Ripple, 롤리팝, 유지보수

참조 : http://frogermcs.github.io/InstaMaterial-concept-part-3-feed-and-comments-buttons/


-

Animation 등이 조금 더 general 하게 발전하면서, 모든 View operation 을 UI Thread ( Main Thread ) 에서만 처리하던 것이 문제가 되고 있다.


그래서 롤리팝에서부터는 Render thread 라는 게 생겨나서 rendering 과 main thread 가 분리되었다.

Main thread 에서 atomic animation 을 만들어서 render thread 로 넘긴다.

그래서 Rendering thread 에서 animation 을 하는 도중에도 main thread 에서는 activity inflating 과 같은 heavy job 을 하면서 버벅이거나 ANR 이 발생하지 않는다.



-

앞서 언급했듯이 Render Thread 자체가 LOS 부터 나왔기 때문에,

Render thread 가 없는 pre-api 21 버전에서는 Ripple 을 쓰는게 권장되지 않는다.

Open source 로 나온 녀석도 결국 뭔가 감싸서 뭔가를 하는 형태라 꽤나 소스 유지보수 측면에서 더러워질 수 있다.


만약 그래도 pre 21 에서 Ripple 과 뭔가 비슷하게 effect 를 주고 싶다면,

다음과 같은 shape selector 를 사용하면 된다.

( 참고로 enterFadeDuration, exitFadeDuration 은 api level 11 부터 )


<?xml version="1.0" encoding="utf-8"?>


<selector xmlns:android="http://schemas.android.com/apk/res/android"

     android:enterFadeDuration="200"

     android:exitFadeDuration="200">

     <item android:state_pressed="false">

          <shape android:shape="oval">

               <solid android:color="@android:color/transparent" />

          </shape>

     </item>


     <item android:state_pressed="true">

          <shape android:shape="oval">

               <solid android:color="#6621425d" />

          </shape>

     </item>

</selector>





반응형

댓글