Differentiating between user scroll and programatic page change in ViewPager

后端 未结 3 1959
野的像风
野的像风 2021-01-30 05:25

I have a android.support.v4.view.ViewPager in my application and I would like to differentiate between a programmatically-initiated smooth scroll and a user-initiat

3条回答
  •  误落风尘
    2021-01-30 05:57

    You are right about using ViewPager.OnPageChangeListener:

    @Override
    public void onPageSelected(int arg0) {
        // programmatically-initiated                           
    }
    
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    
    }
    
    @Override
    public void onPageScrollStateChanged(int arg0) {
        // user-initiated touch scroll      
    }
    

    Alternatively, you can use boolean flags to differentiate between programmatically-initiated smooth scroll and a user-initiated touch scroll. For example, if you use setCurrentItem(int item) to programmatically change the page, try:

    boolean progChange = false;
    
    ....
    ....
    ....
    
    progChange = true;
    setCurrentItem(somePageId);     // Set progChange = true every time
    
    ....
    ....
    ....
    

    Inside your ViewPager.OnPageChangeListener:

    @Override
    public void onPageSelected(int arg0) {
    
    }
    
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        if (progChange) {
            // programmatically-initiated
        } else {
            // user-initiated touch scroll
        }
    
        // Set progChange to false;
        progChange = false;                 
    }
    
    @Override
    public void onPageScrollStateChanged(int arg0) {
    
    }
    

提交回复
热议问题