监听ViewPager滑动到最后一页时,再次拖动的方法监听

当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());

    }

}


展开阅读全文
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值