1. 程式人生 > >遮蔽ViewPager的左右滑動和切換時的滾動動畫

遮蔽ViewPager的左右滑動和切換時的滾動動畫

不詩意的女程式猿不是好廚師~

我們經常會使用到 ViewPager+Fragment+TabLayout 這種類似的組合。

那麼各種不同的需求也就來了。

有時需要viewpager不可左右滑動,但保留切換時的滾動動畫。
有時則需要viewpager不可左右滑動,且切換時也不出現滾動動畫。

【解決方案】
為了達成以上的需求我們需重寫ViewPager。

對於禁止ViewPager左右滑動:
覆蓋ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法
和onTouchEvent(MotionEvent arg0)方法
這兩個方法的返回值都是boolean型別的,只需要將返回值改為false
這樣ViewPager就不會消耗掉手指滑動的事件了,轉而傳遞給上層View去處理或者該事件就直接終止了。

對於 靜止viewpager切換動畫:
則需重寫viewpager的setCurrentItem()方法就可以了

自定義的NoScrollViewPager類如下,可直接複製貼上進行使用。

/**
 * Created by LSY on 2017/9/17.
 * 用於遮蔽viewpager的左右滑動和切換時的滾動動畫
 * 
 * 禁止ViewPager左右滑動:
 * 需重寫ViewPager,覆蓋ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法
 * 和onTouchEvent(MotionEvent arg0)方法
 * 這兩個方法的返回值都是boolean型別的,只需要將返回值改為false
 * 這樣ViewPager就不會消耗掉手指滑動的事件了,轉而傳遞給上層View去處理或者該事件就直接終止了。
 *
 * 靜止viewpager切換動畫:
 * 則需重寫viewpager的setCurrentItem()方法就可以了
 */
public class NoScrollViewPager extends ViewPager { private boolean isCanScroll = true; private boolean isHasScrollAnim=true; public NoScrollViewPager(Context context) { super(context); } public NoScrollViewPager(Context context, AttributeSet attrs) { super(context, attrs); } /** * 設定其是否能滑動 * @param
isCanScroll false 禁止滑動, true 可以滑動 */
public void setScanScroll(boolean isCanScroll) { this.isCanScroll = isCanScroll; } public void setHasScrollAnim(boolean isHasScrollAnim){ this.isHasScrollAnim=isHasScrollAnim; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return isCanScroll && super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { return isCanScroll && super.onTouchEvent(ev); } @Override public void setCurrentItem(int item, boolean smoothScroll) { super.setCurrentItem(item, smoothScroll); } /** * 設定其是否去求切換時的滾動動畫 *isHasScrollAnim為false時,會去除滾動效果 */ @Override public void setCurrentItem(int item) { super.setCurrentItem(item,isHasScrollAnim); } }

使用簡說
①首先是佈局檔案中要換成自己定義的NoScrollViewPger

 <!--<android.support.v4.view.ViewPager-->
    <com.ctvit.worldcom.view.NoScrollViewPager
        android:id="@+id/mainfollowing_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

②初始化控制元件的地方記得也要替換

   @BindView(R.id.mainsearch_viewpager)
    NoScrollViewPager mainsearchViewpager;
//    ViewPager mainsearchViewpager;

③根據需要,呼叫相關的遮蔽左右滑動和切換時滾動效果的方法
如果你只需要禁止左右滑動,就呼叫這個方法:

        //遮蔽左右滑動
        mainsearchViewpager.setScanScroll(false);

如果你既需要遮蔽左右滑動,有需要遮蔽切換時的滾動動畫,
則呼叫如下兩個方法:

        //遮蔽左右滑動
        mainFollowingViewpager.setScanScroll(false);
        //遮蔽切換時的滾動動畫
        mainFollowingViewpager.setHasScrollAnim(false);

積累點滴,做好自己~