標籤:動作 slist scale emc touch container last pre cti
1 elv_music_res_fragment.setOnScrollListener(new AbsListView.OnScrollListener() { 2 private int mLastFirstPostion = 0; 3 private int mLastFirstTop = 0; 4 private int touchSlop = ViewConfiguration.get(getActivity()).getScaledTouchSlop(); 5 6 @Override 7 public void onScrollStateChanged(AbsListView view, int scrollState) { 8 9 }10 11 @Override12 public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {13 int currentTop;14 15 View firstChildView = absListView.getChildAt(0);16 if (firstChildView != null) {17 currentTop = absListView.getChildAt(0).getTop();18 } else {19 //ListView初始化的時候會回調onScroll方法,此時getChildAt(0)仍是為空白的20 return;21 }22 //判斷上次可見的第一個位置和這次可見的第一個位置23 if (firstVisibleItem != mLastFirstPostion) {24 //不是同一個位置25 if (firstVisibleItem > mLastFirstPostion) {26 // 下27 if (rg_container_resFragment.getVisibility() != View.GONE) {28 rg_container_resFragment.setVisibility(View.GONE);29 }30 } else {31 // 上32 if (rg_container_resFragment.getVisibility() != View.VISIBLE) {33 rg_container_resFragment.setVisibility(View.VISIBLE);34 }35 }36 mLastFirstTop = currentTop;37 } else {38 //是同一個位置39 if (Math.abs(currentTop - mLastFirstTop) > touchSlop) {40 //避免動作執行太頻繁或誤觸,加入touchSlop判斷,具體值可進行調整41 if (currentTop > mLastFirstTop) {42 // 上43 if (rg_container_resFragment.getVisibility() != View.VISIBLE) {44 rg_container_resFragment.setVisibility(View.VISIBLE);45 }46 } else if (currentTop < mLastFirstTop) {47 // 下48 if (rg_container_resFragment.getVisibility() != View.GONE) {49 rg_container_resFragment.setVisibility(View.GONE);50 }51 }52 mLastFirstTop = currentTop;53 }54 }55 mLastFirstPostion = firstVisibleItem;56 }57 });
Android--判斷listview上下滑動的方法