当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()); }}
新闻热点
疑难解答