博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PullToRefreshScrollView嵌套SwipeMenuListView冲突问题解决
阅读量:5902 次
发布时间:2019-06-19

本文共 3675 字,大约阅读时间需要 12 分钟。

(一)listView内容不正常显示(注:网上有很多方法)

重写ListView的onMeasure方法

/**     * 以下要重写,防止listview在scrollview容器中不能正常显示的问题     * @param widthMeasureSpec     * @param heightMeasureSpec     */    @Override      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }

(二)ScrollView的上下事件与ListView的左右事件冲突

重写ListView

public class MySwipeMenuListView extends SwipeMenuListView {    public MySwipeMenuListView(Context context) {        super(context);        mGestureDetector = new GestureDetector(context,onGestureListener);    }    public MySwipeMenuListView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        mGestureDetector = new GestureDetector(context,onGestureListener);    }    public MySwipeMenuListView(Context context, AttributeSet attrs) {        super(context, attrs);        mGestureDetector = new GestureDetector(context,onGestureListener);    }//    @Override//    public boolean onInterceptTouchEvent(MotionEvent ev) {//        switch (ev.getAction()) {//            case MotionEvent.ACTION_DOWN:////                //setParentScrollAble(false);//当手指触到listview的时候,让父ScrollView交出ontouch权限,也就是让父scrollview 停住不能滚动//                Log.w("MyLog", "onInterceptTouchEvent down");//            case MotionEvent.ACTION_MOVE:////                Log.w("MyLog", "onInterceptTouchEvent move");//                break;////            case MotionEvent.ACTION_UP://                Log.w("MyLog", "onInterceptTouchEvent up");////            case MotionEvent.ACTION_CANCEL:////                Log.w("MyLog", "onInterceptTouchEvent cancel");//                //setParentScrollAble(true);//当手指松开时,让父ScrollView重新拿到onTouch权限////                break;//            default://                break;////        }////        return super.onInterceptTouchEvent(ev) ;//    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        boolean b =  mGestureDetector.onTouchEvent(ev);        Log.w("MyLog","-- "+ b+" --");        return super.onTouchEvent(ev);    }    private GestureDetector mGestureDetector;    View.OnTouchListener mGestureListener;    private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener(){//        @Override//        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//            Log.w("MyLog","onFling");//            float x = e2.getX() - e1.getX();//            float y = e2.getY() - e1.getY();//            if (Math.abs(y) >= Math.abs(x)){//                setParentScrollAble(false);//                return true;//            }//            //当手指触到listview的时候,让父ScrollView交出ontouch权限,也就是让父scrollview 停住不能滚动//            setParentScrollAble(true);//            return false;//        }        @Override        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {            Log.w("MyLog", "onScroll");            if (distanceY != 0 && distanceX != 0) {            }            if (Math.abs(distanceY) >= Math.abs(distanceX)) {                return true;            }            //当手指触到listview的时候,让父ScrollView交出ontouch权限,也就是让父scrollview 停住不能滚动            setParentScrollAble(false);            return false;        }    };    /**     * 是否把滚动事件交给父scrollview     *     * @param flag     */    private void setParentScrollAble(boolean flag) {        //这里的parentScrollView就是listview外面的那个scrollview        Log.w("MyLog", "setParentScrollAble -- " + flag);        getParent().requestDisallowInterceptTouchEvent(!flag);    }}

附录:

 

转载地址:http://likpx.baihongyu.com/

你可能感兴趣的文章
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
多线程一个错误的例子
查看>>
默认网关及route print
查看>>
Servlet如何处理一个请求?
查看>>
Linux Daily2
查看>>
使用Jquery+CSS如何创建流动导航菜单-Fluid Navigation
查看>>
Office文档出错的几种原因与解决方法
查看>>
【实验报告】实验二:DHCP基本实验
查看>>
气质的培养(哈佛管理世界)
查看>>
Can't get Kerberos realm
查看>>
正则表达式 学习笔记1.1
查看>>
通过案例学调优之--AWR BaseLine管理
查看>>
如何使用MySQL提升权限
查看>>
keepalived 原理,安装,配置
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>