当使用ListView WebView Viewpager GridView遇到ScrollView时,就出现了各种滑动问题。
一种简单的方式是:
<span style="white-space:pre"> </span>//使得view响应触屏事件
scrollView.requestDisallowInterceptTouchEvent(false);
//阻止view响应触屏事件
scrollView.requestDisallowInterceptTouchEvent(true);
举例一
在ScrollView 中使用Viewpager,当需要滑动Viewpager时,屏蔽ScrollView接收触屏事件
@Override
public boolean onTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
//每次进行onTouch事件都记录当前的按下的坐标
curP.x = arg0.getX();
curP.y = arg0.getY();
if(arg0.getAction() == MotionEvent.ACTION_DOWN){
//记录按下时候的坐标
downP.x = arg0.getX();
downP.y = arg0.getY();
//此句代码是为了通知他的父ScrollView现在进行的是本控件的操作,不要对我的操作进行干扰
getParent().requestDisallowInterceptTouchEvent(true);
}
if(arg0.getAction() == MotionEvent.ACTION_MOVE){
//此句代码是为了通知他的父ScrollView现在进行的是本控件的操作,不要对我的操作进行干扰
getParent().requestDisallowInterceptTouchEvent(true);
}
if(arg0.getAction() == MotionEvent.ACTION_UP){
//如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick
if(downP.x==curP.x && downP.y==curP.y){
onSingleTouch();
return true;
}
}
return super.onTouchEvent(arg0);
}
举例二
在ScrollView 中使用WebView。当滑动WebView时,欲使得整体进行滑动,而不是只有webView内部滑动。处理方案:滑动WebView,屏蔽WebView接收触屏事件。把滑动事件交给ScrollView
webview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_MOVE){
//使得ScrollView响应触屏事件
scrollView.requestDisallowInterceptTouchEvent(false);
//true代表拦截触屏事件
return true;
}
return false;
}
});