美文网首页
ViewPager OnPageChangeListener分析

ViewPager OnPageChangeListener分析

作者: 真胖大海 | 来源:发表于2018-04-22 12:20 被阅读53次

监听器概览

   public interface OnPageChangeListener {

        /**
         * This method will be invoked when the current page is scrolled, either as part
         * of a programmatically initiated smooth scroll or a user initiated touch scroll.
         *
         * @param position Position index of the first page currently being displayed.
         *                 Page position+1 will be visible if positionOffset is nonzero.
         * @param positionOffset Value from [0, 1) indicating the offset from the page at position.
         * @param positionOffsetPixels Value in pixels indicating the offset from position.
         */
        void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);

        /**
         * This method will be invoked when a new page becomes selected. Animation is not
         * necessarily complete.
         *
         * @param position Position index of the new selected page.
         */
        void onPageSelected(int position);

        /**
         * Called when the scroll state changes. Useful for discovering when the user
         * begins dragging, when the pager is automatically settling to the current page,
         * or when it is fully stopped/idle.
         *
         * @param state The new scroll state.
         * @see ViewPager#SCROLL_STATE_IDLE
         * @see ViewPager#SCROLL_STATE_DRAGGING
         * @see ViewPager#SCROLL_STATE_SETTLING
         */
        void onPageScrollStateChanged(int state);
    }

1.onPageScrolled

void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);
  1. position并不是当前页,而是当前第一个显示的页。比如从第1页到第0页,此时当前页为1,但是
    position为0。
  2. positionOffset是position处页面的左侧相对于正中区域(用于显示当前页面的区域)左侧的偏移
image

2.onPageSelected

onPageSelected并不是滚动完成才出发,而是在滚动过程中ViewPager状态变为SETTTING后就触发了
函数说明

Animation is not necessarily complete.

3.示例

0,1,2

1-->0

onPageScrollStateChanged: SCROLL_STATE_DRAGGING
onPageScrolled-position:0|offset:0.9604247
onPageScrolled-position:0|offset:0.9314672
onPageScrolled-position:0|offset:0.81274134
onPageScrollStateChanged: SCROLL_STATE_SETTLING
onPageSelected: 0
onPageScrolled-position:0|offset:0.74131274
onPageScrolled-position:0|offset:0.6457529
onPageScrolled-position:0|offset:0.5550193
onPageScrolled-position:0|offset:0.47972974
onPageScrolled-position:0|offset:0.4092664
onPageScrolled-position:0|offset:0.3503861
onPageScrolled-position:0|offset:0.2953668
onPageScrolled-position:0|offset:0.25
onPageScrolled-position:0|offset:0.2084942
onPageScrolled-position:0|offset:0.17471042
onPageScrolled-position:0|offset:0.14285715
onPageScrolled-position:0|offset:0.11776062
onPageScrolled-position:0|offset:0.096525095
onPageScrolled-position:0|offset:0.077220075
onPageScrolled-position:0|offset:0.06274131
onPageScrolled-position:0|offset:0.0492278
onPageScrolled-position:0|offset:0.038610037
onPageScrolled-position:0|offset:0.02992278
onPageScrolled-position:0|offset:0.022200773
onPageScrolled-position:0|offset:0.016409267
onPageScrolled-position:0|offset:0.012548262
onPageScrolled-position:0|offset:0.008687259
onPageScrolled-position:0|offset:0.006756757
onPageScrolled-position:0|offset:0.0038610038
onPageScrolled-position:0|offset:0.002895753
onPageScrolled-position:0|offset:0.0019305019
onPageScrolled-position:0|offset:9.6525095E-4
onPageScrolled-position:0|offset:0.0
onPageScrollStateChanged: SCROLL_STATE_IDLE

1-->2

onPageScrollStateChanged: SCROLL_STATE_DRAGGING
onPageScrolled-position:1|offset:0.064671874
onPageScrolled-position:1|offset:0.111003876
onPageScrolled-position:1|offset:0.13899612
onPageScrolled-position:1|offset:0.17277992
onPageScrollStateChanged: SCROLL_STATE_SETTLING
onPageSelected: 2
onPageScrolled-position:1|offset:0.277027
onPageScrolled-position:1|offset:0.37644792
onPageScrolled-position:1|offset:0.45945942
onPageScrolled-position:1|offset:0.53764474
onPageScrolled-position:1|offset:0.60328186
onPageScrolled-position:1|offset:0.66119695
onPageScrolled-position:1|offset:0.71428573
onPageScrolled-position:1|offset:0.75868726
onPageScrolled-position:1|offset:0.79729724
onPageScrolled-position:1|offset:0.8320464
onPageScrolled-position:1|offset:0.8610039
onPageScrolled-position:1|offset:0.88706565
onPageScrolled-position:1|offset:0.9073359
onPageScrolled-position:1|offset:0.92664087
onPageScrolled-position:1|offset:0.9411197
onPageScrolled-position:1|offset:0.953668
onPageScrolled-position:1|offset:0.9633205
onPageScrolled-position:1|offset:0.97200775
onPageScrolled-position:1|offset:0.97876453
onPageScrolled-position:1|offset:0.98455596
onPageScrolled-position:1|offset:0.988417
onPageScrolled-position:1|offset:0.992278
onPageScrolled-position:1|offset:0.99420846
onPageScrolled-position:1|offset:0.99613905
onPageScrolled-position:1|offset:0.9971043
onPageScrolled-position:1|offset:0.9980695
onPageScrolled-position:1|offset:0.99903476
onPageScrolled-position:2|offset:0.0
onPageScrollStateChanged: SCROLL_STATE_IDLE

总结

  1. 要根据函数说明来理解函数的意思,有时候直接猜的意思绝大部分可能是错的
  2. 和图形有关的知识要在纸上作图或利用作图工具(ppt作图)作图理解

相关文章

网友评论

      本文标题:ViewPager OnPageChangeListener分析

      本文链接:https://www.haomeiwen.com/subject/jeoqlftx.html