android 事件攔截 (Viewpager不可以左右滑動)


以前沒有做過真正的需求,所以從來沒有覺得事件攔截分發處理有什么好懂的。
現在做需求了,真的是什么需求都有,你作為開發都要去研究實現。比如說,只能點不能滑動的viewpager。其實這都可以不用viewpager了。直接用fragment的replace掉就行了。那我想要不可以滑動的viewpager怎么辦。
很簡單,在處理事件的時候,return true表示自己處理,不往下面傳遞。自己消費,那如果你不想自己處理,自己不做任何處理,就 return false; 那viewpager就不會滑動了。

下面就是不可以滑動的viewpager:

禁止左右滑動 包括連續滑動也不響應
同時不影響setCurrentItem


/* * 文件名:CustomViewPager */


package com.example.widget;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class CustomViewPager extends ViewPager {
    private boolean enabled = false;

    public CustomViewPager(Context context) {
        super(context);
    }

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // 觸摸事件不觸發
        if (this.enabled) {
            return super.onTouchEvent(event);
        }
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        // 不處理觸摸攔截事件
        if (this.enabled) {
            return super.onInterceptTouchEvent(event);
        }
        return false;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        // 分發事件,這個是必須要的,如果把這個方法覆蓋了,那么ViewPager的子View就接收不到事件了
        if (this.enabled) {
            return super.dispatchTouchEvent(event);
        }
        return super.dispatchTouchEvent(event);
    }

    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM