本文旨在分享“ 如何準(zhǔn)確實(shí)現(xiàn)ViewPager第一頁(yè)向前和最后一頁(yè)向后滑動(dòng)監(jiān)聽 ”。
?方法總比問題多! ? ? ? ? ? ? ? ? ? ? ? ?
【本文只是其中的一種方案,期待其他方案的分享峡迷!感謝拍磚、建議和支持你虹!】
一绘搞、思路解析
ViewPager的滑動(dòng)狀態(tài)有三種:
1)SCROLL_STATE_DRAGGING——Indicates that the pager is currently being dragged by the user.
【注】正在被用戶拖拽滑動(dòng)狀態(tài)
2)SCROLL_STATE_SETTLING——Indicates that the pager is in the process of settling to a final position.
【注】被用戶拖動(dòng)并松手后,ViewPager自動(dòng)滑動(dòng)傅物,即將歸于停止的狀態(tài)
3)SCROLL_STATE_IDLE——Indicates that the pager is in an idle, settled state.
【注】被用戶滑動(dòng)后的最終靜止?fàn)顟B(tài)
以上三種狀態(tài)夯辖,當(dāng)滑動(dòng)ViewPager的時(shí)候,如果處于第一頁(yè)董饰,繼續(xù)向前滑動(dòng)的時(shí)候不會(huì)產(chǎn)生SCROLL_STATE_SETTLING狀態(tài)蒿褂,但是如果向下一頁(yè)方向滑動(dòng),則必然會(huì)產(chǎn)生SCROLL_STATE_SETTLING狀態(tài)卒暂;如果處于最后一頁(yè)啄栓,繼續(xù)往后滑動(dòng),不會(huì)產(chǎn)生SCROLL_STATE_SETTLING狀態(tài)也祠,但是往前一頁(yè)滑動(dòng)昙楚,也必然會(huì)產(chǎn)生SCROLL_STATE_SETTLING狀態(tài)。
所以诈嘿,可以將SCROLL_STATE_SETTLING這個(gè)狀態(tài)作為監(jiān)聽的flag堪旧!
二削葱、Code Show【本文此處僅摘取關(guān)鍵代碼】
private boolean mIsScrolled ; ? ? ? ? ? ? ? ? ? // ?viewpager是否處于慣性滑動(dòng)
@Override
public ? void ? onPageScrollStateChanged (int ? state) ?{ ? ? ? ? ? ? ? ? // 發(fā)生滑動(dòng)狀態(tài)改變時(shí)回調(diào)
switch (state) {
? ? ? ?case ?ViewPager.SCROLL_STATE_DRAGGING:
? ? ? ? ? ? ? ? mIsScrolled = false;
? ? ? ? ? ? ? ? ?break;
? ? ? ? case ViewPager.SCROLL_STATE_SETTLING:
? ? ? ? ? ? ? ? ?mIsScrolled = true;
? ? ? ? ? ? ? ? ?break;
? ? ? ?case ViewPager.SCROLL_STATE_IDLE:
? ? ? ? ? ? ? ? ?if ( ! mIsScrolled ) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // TODO ? ? 你想要實(shí)現(xiàn)的操作
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ?mIsScrolled = true;
? ? ? ? ? ? ? ? ?break;
}
}