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

조회수 3341회

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

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

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

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를 덮는 최상단에 뷰를 하나 올려놓고 리스트뷰 아이템과 동일한 색으로 아래서부터 위로 알파가 들어간 이미지 뷰만 놓으면 될것 같아요. 알파이미지

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

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)