NestedScrollView+Viewpager+Recycleview的滑动冲突

NestedScrollView+Viewpager+Recycleview的滑动冲突最新业务需求变化 一个页面多个 Recycleview Viewpager viewpager 实现左右滑动 且可以手动滑动 页面逻辑简单 就是数据比较大 最初的时候实现有滑动冲突 后边使用 NestedScroll 可以实现滑动 但是 Viewpager 不能实现手动滑动 Recycleview 的 item 事件冲突 这个只在华为 7 0 手机上出现 华为 8 0 及三星手机上未发现问题 网上也是各种找 后边看

最新业务需求变化,一个页面多个Recycleview+Viewpager,viewpager实现左右滑动,且可以手动滑动,页面逻辑简单,就是数据比较大,最初的时候实现有滑动冲突,后边使用NestedScrollView可以实现滑动,但是Viewpager不能实现手动滑动,Recycleview的item事件冲突(这个只在华为7.0手机上出现,华为8.0及三星手机上未发现问题)网上也是各种找,后边看是NestedScrollView里面的onInterceptTouchEvent给拦截了

下面贴一下封装完成的NestedScrollView的类,完美实现

public class JudgeNestedScrollView extends NestedScrollView {
    private boolean isNeedScroll = true;
    private float xDistance, yDistance, xLast, yLast;
    private int scaledTouchSlop;

    public JudgeNestedScrollView(@NonNull Context context) {
        super(context);
    }

    public JudgeNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public JudgeNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                xDistance = yDistance = 0f;
                xLast = ev.getX();
                yLast = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                final float curX = ev.getX();
                final float curY = ev.getY();

                xDistance += Math.abs(curX - xLast);
                yDistance += Math.abs(curY - yLast);
                xLast = curX;
                yLast = curY;
                Log.e("SiberiaDante", "xDistance :" + xDistance + "---yDistance:" + yDistance);
                return !(xDistance >= yDistance || yDistance < scaledTouchSlop) && isNeedScroll;

        }
        return super.onInterceptTouchEvent(ev);
    }


    /*
    改方法用来处理NestedScrollView是否拦截滑动事件
     */
    public void setNeedScroll(boolean isNeedScroll) {
        this.isNeedScroll = isNeedScroll;
    }
}

参考:http://www.cnblogs.com/shen-hua/p/8052459.html

贴一下布局:

<com.xxxx.app.widget.JudgeNestedScrollView android:id="@+id/scorll" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:focusableInTouchMode="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:visibility="gone"> <com.zhy.autolayout.AutoLinearLayout android:id="@+id/lin_content" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#F1F1F1" android:orientation="vertical"> <!--轮播图--> <FrameLayout android:id="@+id/view_lbt" android:layout_width="wrap_content" android:layout_height="590px" /> <!--详情--> <TextView android:id="@+id/tv_header_word" android:layout_width="match_parent" android:layout_height="60px" android:layout_alignTop="@+id/rv" android:layout_marginRight="55px" android:background="@color/gainsboro" android:paddingLeft="40px" android:paddingTop="10px" android:text="A" android:textColor="@color/black" android:textSize="14sp" android:visibility="visible" /> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:focusable="false" android:layout_height="wrap_content" ></android.support.v7.widget.RecyclerView> </com.zhy.autolayout.AutoLinearLayout> </com.xxxx.app.widget.JudgeNestedScrollView>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233641.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringCloud Alibaba完整使用

    SpringCloud Alibaba完整使用搭建AlibabaCloud首先搭建几个环境全部在Linux下1、nacos注册中心2、sentinel流量控制,断路3、apache-skywalking-apm-bin监控接口的速度、效率等等4、Rocketmq的使用项目如下在这里插入代码片首先创建pom工程***Alibaba-Cloud***|<?xmlver……

    2022年6月27日
    39
  • 解决IDEA中 XML文件屎黄色背景 的方法

    解决IDEA中 XML文件屎黄色背景 的方法介绍如何去除idea中.xml文件显示屎黄色背景的方法。不少资料用的是较旧版本中设置的路径,导致有些朋友来问为啥找不到修改设置的地方,所以在这里用下较新版本的idea作为演示。

    2022年10月10日
    4
  • 互联网广告综述之点击率特征工程

    互联网广告综述之点击率特征工程

    2021年9月11日
    56
  • 模糊PID控制算法的C++实现

    模糊PID控制算法的C++实现模糊PID的C++实现方法

    2022年5月3日
    36
  • Mac使用Boot Camp安装win10(不用U盘)

    Mac使用Boot Camp安装win10(不用U盘)原文在https://bbs.feng.com/forum.php?mod=viewthread&tid=10748184&page=1&mobile=no大概的步骤:1、从微软官网下载win10专业版本iso文件(文件有4.6G,官网白天下载很慢,晚上下载快点);2、使用MacOS自带的BootCamp(新兵训练营?)安装win10,BootCamp安装时会从官网服务器下载支

    2022年5月12日
    146
  • c++stl基础及应用_stl详解

    c++stl基础及应用_stl详解一、c++STL常用内容总结文章目录一、c++STL常用内容总结1.vector(数组)1.1介绍1.2方法函数1.3注意点1.3.a排序1.3.b访问2.stack(栈)2.1介绍2.2方法函数2.3注意点2.3.a.栈遍历2.3.b.模拟栈3.queue(队列)3.1介绍3.2方法函数4.deque(双端队列)4.1介绍4.2方法函数4.3注意点5.priority_queue(优先队列)5.1介绍5.2函数方法5.3设置优先级5.3.a基本数据类型的优先级5

    2022年10月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号