當ViewPager滑動到最后一頁時當用戶再次拖動時,開發者可能會監聽此狀態去做一些跳轉邏輯,比如加載新頁面或者觸發其他事件等等,今天我就簡單實現該案例,其實邏輯很簡單,主要是給ViewPager添加監聽方法,然后在OnPageChangeListener中去判斷當前ViewPager的狀態,然后去做一些跳轉邏輯,我把完整的java代碼貼給大家參考,由于代碼里面注釋比較詳細,我就不在此用過多的文字贅述了。
功能代碼:
package com.zhuandian.msuic.viewpager;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.util.Log;import com.zhuandian.msuic.R;import java.util.ArrayList;import java.util.List;/** * Created by 謝棟 on 2017/2/2. */public class ViewPagerTest_2 extends AppCompatActivity{ PRivate ViewPager viewpager; private TabLayout tablayout; private List<Fragment> fragmentList = new ArrayList<>(); private boolean isLastPage = false; private boolean isDragPage = false; private boolean canJumpPage = true; private int[] mImgIds = new int[] {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher}; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_layout_2); initView(); viewpager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(),fragmentList)); tablayout.setupWithViewPager(viewpager); //同步Tablayout與ViewPager// ********************************************************************************************************** //監聽ViewPager的跳轉狀態,當跳轉到最后一頁時,執行jumpToNext()方法 viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { /** * 在屏幕滾動過程中不斷被調用 * @param position * @param positionOffset 是當前頁面滑動比例,如果頁面向右翻動,這個值不斷變大,最后在趨近1的情況后突變為0。如果頁面向左翻動,這個值不斷變小,最后變為0 * @param positionOffsetPixels 是當前頁面滑動像素,變化情況和positionOffset一致 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { Log.v("AAA",isLastPage+" "+isDragPage+" "+positionOffsetPixels); if (isLastPage && isDragPage && positionOffsetPixels == 0){ //當前頁是最后一頁,并且是拖動狀態,并且像素偏移量為0 if (canJumpPage){ canJumpPage = false; JumpToNext(); } } } /** * 這個方法有一個參數position,代表哪個頁面被選中 * @param position 當前頁的索引 */ @Override public void onPageSelected(int position) { isLastPage = position == mImgIds.length-1; } /** * 在手指操作屏幕的時候發生變化 * @param state 有三個值:0(END),1(PRESS) , 2(UP) 。 */ @Override public void onPageScrollStateChanged(int state) { isDragPage = state == 1; } }); } /** * viewpager滑動到最后一頁做跳轉邏輯 */ private void JumpToNext() { Log.v("DDD","函數被觸發-------"); } /** * 初始化布局 */ private void initView() { viewpager = (ViewPager) findViewById(R.id.viewpager); tablayout = (TabLayout) findViewById(R.id.tablayout); //添加Fragment fragmentList.add(new ViewPagerFragment_1()); fragmentList.add(new ViewPagerFragment_2()); fragmentList.add(new ViewPagerFragment_3()); }}
新聞熱點
疑難解答