解决ListView在ScrollView中滑动冲突的问题

解决ListView在ScrollView中滑动冲突的问题
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;
        }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值