android 事件攔截 (Viewpager不可以左右滑動)
阿新 • • 發佈:2019-01-24
以前沒有做過真正的需求,所以從來沒有覺得事件攔截分發處理有什麼好懂的。
現在做需求了,真的是什麼需求都有,你作為開發都要去研究實現。比如說,只能點不能滑動的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;
}
}