1. 程式人生 > >android 事件攔截 (Viewpager不可以左右滑動)

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; } }