http://www.eoeandroid.com/thread-263391-1-1.html
(出处: eoe 移动开发者论坛)
在此谢谢http://www.eoeandroid.com/thread-263391-1-1.html中的各位,为我解决了问题,特此将你们所提供的方法总结一下,供我自己以后遇到之后,可以快速的解决.
下面介绍的解决ScrollView和ListView滑动冲突的方法,有很多个,如果一个不行,请换下一个......
1.主要是需要自定义继承与ListView的类,
然后将 public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法重写,如下,其他的无需更改即可
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//加上下面的话即可实现listview在scrollview中滑动
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
System.out.println("expandSpec = " + expandSpec);
super.onMeasure(widthMeasureSpec, expandSpec);
}
2.
重写scrollview的方法也可以解决 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return false; } |
3.下面的这个方法,比较简单,就是讲自己的滑动事件让自己来处理...
本人就是通过这个方法解决问题的,特此谢谢shy11121714
listView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
scrollView.requestDisallowInterceptTouchEvent(false);
}else{
scrollView.requestDisallowInterceptTouchEvent(true);
}
return false;
}
});
4.最后还有一个,自称菜鸟的写的一个解决方法,.......[/偷笑]
其实,本人也很菜鸟啦....
我是菜鸟,说一下我的解决方法:在listview的onInterceptTouchEvent(默认返回值是false)方法中添加判断条件,如果纵向滑动的距离大于横向滑动的距离,那么就返回true,listview就会接收touch事件,如果横向滑动距离大于纵向华东距离,就返回false,listview就不会接收touch事件,转而将其交给scrollview。代码如下:
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean result = false;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = ev.getX();
lastY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
int distanceX =(int) Math.abs( ev.getX() - lastX);
int distanceY = (int) Math.abs(ev.getY()-lastY);
if(distanceX>distanceY && distanceX>10){
result = true;
}else{
result = false;
}
break;
default:
break;
}
return result;
}