ScrollView和ListView滾動手勢衝突解決方法

開發做多了,總會遇到變態的需求,有時不得不使用ScrollView和ListView嵌套,但是ScrollView和ListView存在滑動衝突,比較蛋疼,
後來發現了一個比較簡單的方法,分享一下。
衝突的原因主要是ScroolView的 onInterceptTouchEvent(MotionEvent ev) 方法給攔截掉了,事件派發不到ListView中,所以造成ListView不能滾動。

解決方法:
重寫ListView,上代碼:
package dpfs.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;

/**
* Created by xingzy on 2015/11/27.
*/
public class BuildInListView extends ListView {
public BuildInListView(Context context) {
super(context);
}

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

public BuildInListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
getParent().requestDisallowInterceptTouchEvent(false);
break;

}
return super.onInterceptTouchEvent(ev);
}
}
在佈局文件中使用自己定義的BuildInListView取代系統的ListView就可以了。
需要注意的是,onInterceptTouchEvent(MotionEvent ev)方法中getParent().requestDisallowInterceptTouchEvent(true)行代碼,getParent()得到的是當前ListView的父佈局,
如果不能正常滾動,可以嘗試getParent().getParent().requestDisallowInterceptTouchEvent(true);

轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章