参考来源:http://blog.csdn.net/xipiaoyouzi/article/details/12121131
http://www.cnblogs.com/exmyth/p/4555814.html
监听事件的解析:
对ViewPager的滑动监听事件进行一个解析:调用要用到OnPageChangeListener接口,实现其中的三个方法:
onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
onPageSelected(int position)
onPageScrollStateChanged(int state)
1:
/**
* 屏幕在滚动的过程中会不断的调用
* position:当前page的位置
* positionOffset:0——1之前的变化 (0 <= x < 1)
* positionOffsetPixels:偏移的像素量
*/
onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
打印出的日志如下(右滑的打印日志):(position:这个值只有在当滑动成功的时候才会变成我们滑动到的那个页面的值;positionOffset:如果页面向右翻动,这个值不断变大,最后在趋近1的情况后突变为0。如果页面向左翻动,这个值不断变小,最后变为0;positionOffsetPixels:表示的就是当前页面滑动的像素数是多少,变化趋势是向右滑,该值会不断的变大,左滑,该值会不断的变小)
E/tag: 0,0.0,0
E/tag: 0,0.009259259,10
E/tag: 0,0.027777778,30
E/tag: 0,0.04074074,44
E/tag: 0,0.055555556,60
E/tag: 0,0.0712963,77
E/tag: 0,0.08611111,93
E/tag: 0,0.096296296,104
E/tag: 0,0.106481485,115
E/tag: 0,0.11481482,124
E/tag: 0,0.12222222,132
E/tag: 0,0.12962963,140
E/tag: 0,0.13796297,149
E/tag: 0,0.14814815,160
E/tag: 0,0.1574074,170
E/tag: 0,0.16018519,173
E/tag: 0,0.16203703,174
E/tag: 0,0.1675926,181
E/tag: 0,0.1712963,185
E/tag: 0,0.17592593,190
E/tag: 0,0.17962962,194
E/tag: 0,0.18333334,198
E/tag: 0,0.18703704,202
E/tag: 0,0.19259259,208
E/tag: 0,0.19722222,213
E/tag: 0,0.20555556,222
E/tag: 0,0.21666667,234
E/tag: 0,0.2212963,239
E/tag: 0,0.22685185,245
E/tag: 0,0.23425926,253
E/tag: 0,0.23425926,253
E/tag: 0,0.23796296,257
E/tag: 0,0.24259259,262
E/tag: 0,0.24351852,263
E/tag: 0,0.2462963,266
E/tag: 0,0.25,270
E/tag: 0,0.25277779,273
E/tag: 0,0.25555557,276
E/tag: 0,0.2611111,282
E/tag: 0,0.2638889,285
E/tag: 0,0.26944444,291
E/tag: 0,0.27222222,294
E/tag: 0,0.2777778,300
E/tag: 0,0.2851852,308
E/tag: 0,0.2935185,317
E/tag: 0,0.29907408,323
E/tag: 0,0.30648148,331
E/tag: 0,0.31574073,341
E/tag: 0,0.32407406,349
E/tag: 0,0.33425927,361
E/tag: 0,0.34351853,371
E/tag: 0,0.35833332,387
E/tag: 0,0.375,405
E/tag: 0,0.39074075,422
E/tag: 0,0.4037037,436
E/tag: 0,0.42037037,454
E/tag: 0,0.43055555,465
E/tag: 0,0.43703705,472
E/tag: 0,0.4462963,482
E/tag: 0,0.44907406,484
E/tag: 0,0.45185184,488
E/tag: 0,0.4537037,490
E/tag: 0,0.4564815,493
E/tag: 0,0.4611111,498
E/tag: 0,0.4611111,498
E/tag: 0,0.4611111,498
E/tag: 0,0.46296296,500
E/tag: 0,0.46574074,503
E/tag: 0,0.46851853,506
E/tag: 0,0.4722222,510
E/tag: 0,0.47592592,514
E/tag: 0,0.4787037,517
E/tag: 0,0.48240742,521
E/tag: 0,0.48518518,524
E/tag: 0,0.48796296,527
E/tag: 0,0.48981482,529
E/tag: 0,0.49166667,531
E/tag: 0,0.49722221,537
E/tag: 0,0.49907407,539
E/tag: 0,0.5046296,545
E/tag: 0,0.5074074,548
E/tag: 0,0.51296294,554
E/tag: 0,0.51574075,557
E/tag: 0,0.5175926,559
E/tag: 0,0.52037036,562
E/tag: 0,0.5231481,564
E/tag: 0,0.52592593,568
E/tag: 0,0.53055555,573
E/tag: 0,0.5314815,574
E/tag: 0,0.53333336,576
E/tag: 0,0.5361111,579
E/tag: 0,0.537963,581
E/tag: 0,0.5407407,584
E/tag: 0,0.54351854,587
E/tag: 0,0.5472222,591
E/tag: 0,0.54814816,592
E/tag: 0,0.5509259,595
E/tag: 0,0.5537037,598
E/tag: 0,0.5574074,602
E/tag: 0,0.5601852,605
E/tag: 0,0.5638889,609
E/tag: 0,0.5675926,613
E/tag: 0,0.5694444,615
E/tag: 0,0.57222223,618
E/tag: 0,0.57685184,623
E/tag: 0,0.5796296,625
E/tag: 0,0.5833333,630
E/tag: 0,0.5861111,633
E/tag: 0,0.5888889,636
E/tag: 0,0.59074074,638
E/tag: 0,0.59537035,643
E/tag: 0,0.59814817,646
E/tag: 0,0.6027778,651
E/tag: 0,0.6064815,655
E/tag: 0,0.6074074,656
E/tag: 0,0.6101852,659
E/tag: 0,0.61388886,662
E/tag: 0,0.6175926,667
E/tag: 0,0.6203704,670
E/tag: 0,0.6212963,671
E/tag: 0,0.62314814,673
E/tag: 0,0.6259259,676
E/tag: 0,0.6296296,680
E/tag: 0,0.63148147,682
E/tag: 0,0.6333333,684
E/tag: 0,0.63796294,689
E/tag: 0,0.64166665,693
E/tag: 0,0.6425926,694
E/tag: 0,0.6462963,698
E/tag: 0,0.65,702
E/tag: 0,0.65462965,707
E/tag: 0,0.6574074,710
E/tag: 0,0.662963,716
E/tag: 0,0.6666667,720
E/tag: 0,0.6703704,724
E/tag: 0,0.67407405,728
E/tag: 0,0.6787037,733
E/tag: 0,0.68425924,739
E/tag: 0,0.6953704,751
E/tag: 0,0.7212963,779
E/tag: 0,0.7416667,801
E/tag: 0,0.7861111,849
E/tag: 0,0.80277777,867
E/tag: 0,0.8324074,899
E/tag: 0,0.85555553,924
E/tag: 0,0.8796296,950
E/tag: 0,0.8962963,968
E/tag: 0,0.9111111,984
E/tag: 0,0.9287037,1003
E/tag: 0,0.9398148,1015
E/tag: 0,0.95,1026
E/tag: 0,0.96018517,1037
E/tag: 0,0.9675926,1045
E/tag: 0,0.97314817,1051
E/tag: 0,0.9787037,1057
E/tag: 0,0.98333335,1062
E/tag: 0,0.98703706,1066
E/tag: 0,0.9898148,1069
E/tag: 0,0.9925926,1072
E/tag: 0,0.99444443,1074
E/tag: 0,0.9953704,1075
E/tag: 0,0.99722224,1077
E/tag: 0,0.99814814,1078
E/tag: 0,0.9990741,1079
E/tag: 1,0.0,0
2:
/**
* 当前哪一个页面被选中
* @param position 当前选中的页面的页数
*/
onPageSelected(int position)
3:
/**
* 手指在操作屏幕的时候会发生变化的时候调用
* @param state 状态值 0:end 1:press 2:up
*/
@Override
public void onPageScrollStateChanged(int state) {
if (state == 0) {
Log.e("tag1", "state_end:"+String.valueOf(state));
} else if (state == 1) {
Log.e("tag1", "state_press:"+String.valueOf(state));
}else if (state == 2) {
Log.e("tag1", "state_up:"+String.valueOf(state));
}
}
打印日志如下:
E/tag1: state_press:1
E/tag1: state_up:2
E/tag1: state_end:0
E/tag1: state_press:1
E/tag1: state_up:2
E/tag1: state_end:0
E/tag1: state_press:1
E/tag1: state_up:2
E/tag1: state_end:0
当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1,手指抬起时,如果发生了滑动(即使很小),这个值会变为2,然后最后变为0 。总共执行这个方法三次。
4:综述
三个方法的执行顺序为:用手指滑动时,最先执行一遍onPageScrollStateChanged(1——press),然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged(2--up),然后立即执行一次onPageSelected,然后再不断执行onPageScrollStateChanged,最后执行一次onPageScrollStateChanged(0--end)。