[컴][안드로이드] listview 에서 스크롤 시 이미지 숨기기

listview 스크롤 할 때 이미지 숨기기, hide images during scrolling
리스트뷰 스크롤 끝나면 이미지 보여주기

scroll state 변할 때 getView() 호출하기


Overview

구성은 이렇다.

  1. Adapter 에서 할 일
    1. Adapter 에서 scrolling 인지를 저장하는 변수 flag 를 하나 만들어 둔다.
    2. flag 에 따라 원하는 동작을 하도록 getView() 수정
  2. onScrollStateChanged() 에서 할 일
    1. adapter 의 flag 에 scrolling 중일 때 표시
    2. 스크롤이 멈췄을때(IDLE) adapter 의 notifyDataSetChanged() 호출


Details

일단 작성한 코드는 아래와 같다.
ListView.java

lview.setOnScrollListener(new OnScrollListener() {

 @Override
 public void onScrollStateChanged(AbsListView view, int scrollState) {
  currentChartAdapter.mIsScrolling = (scrollState != SCROLL_STATE_IDLE);

  Log.d("namh", "scrollStateChanged = " + scrollState);

  int first = lview.getFirstVisiblePosition();
  int count = lview.getChildCount(); // count of listitems showed on the screen

  // order to draw when the scrolling is stopped.
  if (scrollState == SCROLL_STATE_IDLE 
   || (first + count > currentChartAdapter.getCount())) {
   currentChartAdapter.notifyDataSetChanged();
  }
 }

 @Override
 public void onScroll(AbsListView view, int firstVisibleItem,
      int visibleItemCount, int totalItemCount) {
 }
});

Adapter.java

@Override
public View getView(int pos, View convertView, ViewGroup parent) {
 ...
 
 if(mIsScrolling == true)
 {
  holder.thumb.setImageBitmap(mNoImage);
 }
 else{
  
  if(holder.thumb != null)
  {
   displayImage(holder.thumb,
     item.getThumbUrl());
  }
 }
 ...
}


ref. 2 를 에서 이야기 한 것 처럼 notifyDataSetChanged() 를 활용해서 만들었다. ref.3,4 에서 하는 것처럼 ImageView 에 직접 setImageBitmap() 을 해줘도 될 듯 하지만, notifyDataSetChange() 로 하는 것이 훨씬 간결해서 좋다. ^^

예제를 보고 싶어할 수도 있는데, "KaKao Talk 의 채팅 리스트" 를 참고하면 될 듯 하다. 그런 느낌으로 구현이 된다.

확실히 스크롤 속도는 좋지만, 스크롤 동안에 이미지를 보여주지 못하는 것은 user 에 따라 호불호가 갈릴 듯 하다.



Reference

  1. Android: onScrollStateChanged SCROLL_STATE_IDLE sometimes doesn't fire
  2. Android - ListView - calling the getView() on demand
  3. [안드로이드] 천천히 로딩되는 리스트 아이템
  4. <android-sdk>\samples\android-13\ApiDemos\src\com\example\android\apis\view\List13.java

댓글 없음:

댓글 쓰기