본문 바로가기

프로그래밍/Android 짜투리 지식

[android] Behavior

다 이해하고 작정하고 적는것이 아니고, 적어가면서 가다듬는 용임 


Android design support library와 함께 등장한 Behavior

CoordinatorLayout이 등장하면서 Scroll을 제어하기 위해 제시한 방법이다.


Design Support Library(  링크  ) 를 소개할때 보이는 AppBarLayout을 감싸서 스크롤을 제어하는 모습을 볼 수 있다.


그때까지는 아마 이러한 형태의 View를 구현하려면 가장 먼저 떠올리는것이 아마 ParallaxView(  링크  )가 아니었나싶다. (이제는 모두가 CoordinatorLayout을 떠올린다.)


그런데 CoordinatorLayout을 써본 사람이라면 fling시 누구나 이런 말을 했을것이다. 100%

"이거 아닌데..."  관련 동영상 


다시 parallaxView를 떠올린다.


이에 관련해서 사람들은 역시나 해결방법은 제안했고, 누구는 RecyclerView의 오류였다고 23.1.0에서 수정이 되었다고 한다.    링크    

해결방법은 Scroll 처리부분을 재정의 하는 부분이 많았다.


다시 Behavior로 돌아와서 Behavior은 그럼 뭘 하는 클래스인가.

스크롤에 대한 View 연관성을 좀더 긴밀하게 처리할 수 있다.  ☞ 참고 

그냥 Scroll Intercept(현재까지는 이렇게 이해)를 잘 포장해서 패턴화 시킨것 같다.


사용방법 : 

 1. xml에서 정의 시 등록

<android.support.v7.widget.RecyclerView

           android:layout_width="match_parent"
           android:layout_height="match_parent"
           app:layout_behavior="your.pakage.name.behaviorname" />


 2. 클래스에 Annotation 직접 정의

@CoordinatorLayout.DefaultBehavior(MyAppBarLayout.Behavior.class)

   public class MyAppBarLayout extends AppBarLayout {


 


그리고 왠지 잘 되어 있는 Behavior와 CoordinatorLayout 샘플을 찾았다.


https://github.com/henrytao-me/smooth-app-bar-layout


위 Library는 CoordinatorLayout을 사용하며, AppBarLayout을 상속해서 구현했다.

내가 본 기능은 SmoothExitUntilCollapsed인데 (아마 CoordinatorLayout을 사용하는 사람 절반 이상은 이 기능을 위해 사용하지 않을까.. 펼쳐진 Toobar영역을 스크롤시 최소 높이까지 줄인 다음, ListView를 스크롤 시키는 UX) Scroll 시, BaseBehavior.onScrollChaned()함수에서 AppBarLayout과 RecyclerLayout을 동시에 움직여 마치 RecyclerView는 스크롤이 안되고 있는것 처럼 보여주고있다. 아래 사진 참고



그럼 Behavior는 어디에 붙어있는지 보면 (  참고  )

CoordinatorLayout, AppBarLayout, AppBarLayout.ScrollingViewBehavior, FloatingActionButton 에 구현되어 있다. 또 NestedScrollView는 Behavior의 핵심 메소드들이 자체적으로 구현되어 있다.


그럼 Behavior의 주된 메소드는 무엇인가 보면

1. layoutDependsOn(View Parent, View child, View dependency)

2. onDependentViewChanged(View Parent, View child, View dependency)

3. onNested... 시리즈 (순서대로 호출)

  - onNestedStartScroll

  - onNestedScrollAccepted

  - onNestdPreScroll

  - onNestedScroll

    반복..

  - onNestdPreScroll

  - onNestedStopScroll


  - onNestedPreFling

  - onNestedFling


Fling 시 호출 순서는 위의 순서와 같다.


그럼 Nested시리즈 중에서 빠짐없이 등장하는 1,2,3번째의 전달인자에 대해 onNestedScroll을 예로 보면

onNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target,
int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed)

1번째 전달인자 : 2번째 전달인자의 부모 View

2번째 전달인자 : Behavior을 가진 View

3번째 전달인자 : Behavior을 등록한 View


나머지 전달인자는 뭐 보면 알것 같은데 dx, dy의 d는 delta 또는 distance의 d인거 같다.(추측.. 값을 보니 스크롤의 이동거리가 표시되었다.)


이번엔 이걸로 마치고 다음에는 Behavior로 뭘 할 수 있는지, 현재 배포된 삐걱대는 CoordinatorLayout을 구제하는 방법에 대해서 공부해볼려고 한다.



링크 출처 : 

 - 출처는 오로지 위 자료의 출처를 분명하게 하기 위함임을 말씀드립니다.

1. http://www.kmshack.kr/ 

2. http://googledevkr.blogspot.kr/

3. http://stackoverflow.com/

4. https://lab.getbase.com

5. http://developer.android.com/

'프로그래밍 > Android 짜투리 지식' 카테고리의 다른 글

[android] SSO와 Service  (0) 2016.03.29
[android] onTouchEvent  (0) 2016.03.07
[android] 인상적인 View  (0) 2015.06.23
[android] attr/actionbarSize  (0) 2015.03.24
[android] 4.4 webview 파일 첨부  (0) 2015.03.12