Android 에서 Recyclerview (혹은 ListView) 에서 상단 아이템 Alpha 처리


Android 에서 Recyclerview (혹은 ListView) 에서 상단 부분의 아이템이 자연스럽게 사라지도록 만들려고 합니다. (뒷 배경이 비춰 보이겠죠)

상단에 있는 아이템을 Alpha 처리를 하면 되지 않을까 하는데... 먼가 덮이는 구조가 아니라, 아이템이 사라지는 구조이다 보니 아이디어가 잘 생각이 안나네요.. 게다가 스크롤됨에 따라서 아이템의 Alpha 처리가 계속 갱신이 되어야 할것으로 생각되구요..

해당 문제에 대해 도움 주실 수 있는 분이 계실까요? ^

  • 2016년 03월 25일에 작성됨

조회수 515


2 답변


RecyclerView 의 스크롤에 따라 어떤 변화를 주고 싶을때 https://github.com/ksoichiro/Android-ObservableScrollView 요 라이브러리를 사용해 보세요. 아주 쉽게 구현하실 수 있을꺼예요~ 예를들면 특정 높이 만큼 스크롤 되면서 점점 툴바가 불투명하게 만들고 싶다면. 아래와 같은 느낌적인 필링으루~

recyclerView.setScrollViewCallbacks(new ObservableScrollViewCallbacks() {
            @Override
            public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) {
                int headerHeight = (int) (DisplayUtils.getDisplaySize(ArticleActivity.this).x / 1.5f) - toolbar.getHeight();
                float ratio = 0;
                if (scrollY > 0 && headerHeight > 0) {
                    ratio = (float) Math.min(Math.max(scrollY, 0), headerHeight) / headerHeight;
                }
                int newAlpha = (int) (ratio * 255);
                toolbarDrawable.mutate().setAlpha(newAlpha);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    toolbar.setBackground(toolbarDrawable);
                } else {
                    toolbar.setBackgroundDrawable(toolbarDrawable);
                }
            }

            @Override
            public void onDownMotionEvent() {

            }

            @Override
            public void onUpOrCancelMotionEvent(ScrollState scrollState) {

            }
        });


리스트뷰를 스크롤업 할때마다 최상단에 있는 아이템이 사라지게 하고 싶다는것인가요? (이해를 제대로 했는지 잘 모르겠습니다.;) 리스트뷰를 스크롤업할때마다 최상단에 있는 아이템에 알파를 먹이면서 사라지게 하려면 저라면 아래와같이 구현할것 같습니다.

  1. Recyclerview(혹은 LsitView)에 OnScrollListener()를 달아준다.
  2. onScrolled가 불릴때 스크롤이 올라가는것인지 체크한다.
  3. 스크롤이 올라갈때마다 findFirstVisibleItemPosition()함수로 RecyclerView에서 현재 첫번째에 보여지는 아이템의 position을 알아낸 후 position으로 해당하는 뷰를 가져온다.
  4. 가져온 아이템뷰의 텍스트나 아이콘에 알파가 들어간 컬러를 입혀준다. 자연스럽게 보여져야하니 color.xml에 알파 10%, 30%, 50%, 80%, 100%, 정도의 알파가 들어간 컬러를 미리 정의해서 스크롤이 올라가는 정도에 따라 미리 정의한 알파컬러를 적절히 set해준다. (스크롤이 올라가는 정도를 계산하는게 조금 까다롭겠네요;;)

아래 이미지같은 느낌으로 아래부터 조금씩 사라지게하고 싶으시다면 Recyclerview를 덮는 최상단에 뷰를 하나 올려놓고 리스트뷰 아이템과 동일한 색으로 아래서부터 위로 알파가 들어간 이미지 뷰만 놓으면 될것 같아요. 알파이미지

조금이라도 도움이 되셨으면 합니다.;

  • 2016년 06월 01일에 수정됨
    안드로이드, 루비온레일즈
  • 2016년 03월 26일에 작성됨
    안드로이드, 루비온레일즈

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close