安卓多个RecyclerView滑动与显示问题
 最近在项目遇到这样的问题:在一线性垂直布局内,有两个垂直的RecyclerView,如果直接高度直接设置wrap-content,
 通常会导致滑动冲突或是内容显示不全。
首先说下解决的思路,就是在最外面嵌套一层自定义的ScrollView,重写其相关方法,判断若为垂直滑动则拦截下来,不交由RecyclerView来处理。
这样的话,滑动冲突就能解决,并且是很流畅的。
不过这样在有些设备可能还会出现个问题, 就是内容显示不全。这里可以通过在显示不全的RecyclerView外面套一层RelativeLayout,即:
           <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    >
                    <!-- 和项目为androidx无关 -->
                    <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/recyclerview"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content" />
           </RelativeLayout>
这样的话, 内容就可以显示完全了。
下面继续ScrollView的滑动事件
自定义一个view,并继承自ScrollView, 再重写onInterceptTouchEvent方法;
具体内容则是:
    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        int action = e.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                // downX = (int) e.getRawX();
                downY = (int) e.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                int moveY = (int) e.getRawY();
                if (Math.abs(moveY - downY) > touchSlop) {
                    return true;
                }
        }
        return super.onInterceptTouchEvent(e);
    }
获取触屏开始和结束位置坐标的Y值,取相减的绝对值,再与touchSlop比较,大于这个值则判断此次为滑动事件,则拦截。
其中touchSlop 是判断是否滑动的参考值。官方给出的解释是
/**
 *  Distance in pixels a touch can wander before we think the user is scrolling
 */
大体过程就是这样,下面贴上自定义ScrollView的全部代码:
package com.asche.wetalk.helper;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.ScrollView;
/**
 *  拦截滑动事件,不由recyclerview处理
 */
public class MyScrollViewScroll extends ScrollView {
    // private int downX;
    private int downY;
    private int touchSlop;
    public MyScrollViewScroll(Context context) {
        super(context);
        touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }
    public MyScrollViewScroll(Context context, AttributeSet attrs) {
        super(context, attrs);
        touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }
    public MyScrollViewScroll(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        int action = e.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                // downX = (int) e.getRawX();
                downY = (int) e.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                int moveY = (int) e.getRawY();
                if (Math.abs(moveY - downY) > touchSlop) {
                    return true;
                }
        }
        return super.onInterceptTouchEvent(e);
    }
    @Override
    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
        super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
    }
}
安卓多个RecyclerView滑动与显示问题的更多相关文章
- 安卓开发——WebView+Recyclerview文章详情页,解决高度问题
		安卓开发--WebView+Recyclerview文章详情页,解决高度问题 最近在写一个APP时,需要显示文章详情页,准备使用WebView和RecyclerView实现上面文章,下面评论.出现了W ... 
- 解决ScrollView嵌套RecyclerView出现item显示不全的问题
		问题:ScrollView嵌套RecyclerView时,RecyclerView的item显示不全 出现问题不要慌,耐心解决才是王道,哈哈.首先说下出现这个问题的情景吧,首先声明这个问题在23版 ... 
- js鼠标滑动图片显示隐藏效果
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- Android上下左右滑动,显示底层布局
		转载博客地址:http://www.cnblogs.com/flyme2012/p/4106308.html 闲着没事做了一个小东西.Android的上下左右滑动,显示底层布局.可以做类似于QQ消息列 ... 
- ios 仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View.
		仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View. 实现原理,UINavigationController 的 self.view显示时把当前显示的vie ... 
- 监听RecyclerView滑动到末端
		监听RecyclerView滑动到末端 效果图 实现 1. 添加滑动到末端的接口 package com.kongqw.recyclerviewdemo; /** * Created by kongq ... 
- Android ScrollView嵌套Recyclerview滑动卡顿,松手即停问题解决;
		假如你的布局类似这样的: <ScrollView android:layout_width="match_parent" android:layout_height=&quo ... 
- 安卓,网页控件,显示网页  Android, web controls, display web pages
		安卓,网页控件,显示网页Android, web controls, display web pages 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq ... 
- android studio中使用recyclerview制作个显示考勤打卡的日历来
		1. 用户在app端选择个日期就能查询这个月的考勤打卡信息,并以日历上标注不同的颜色来显示给用户,当然这个日历是recyclerview做出来的,只是每行显示7个,表示一周的七天. 2. 员工考勤打卡 ... 
随机推荐
- TestNG入门
			在Eclipse中安装TestNG 打开Eclipse Help ->Install New Software , 然后Add "http://beust.com/ecli ... 
- FileSaver.js导出json文件和文本
			最近刚刚写了个json数据导出生成Excel文件的,顺便总结下利用FileSaver.js导出其他文件的,这里要注意的一个点就是,当导出的是json文件或是txt文件时,导出的内容要是字符串,特别当时 ... 
- c#线程-线程同步
			线程同步 上一篇介绍了如何开启线程,线程间相互传递参数,及线程中本地变量和全局共享变量区别. 本篇主要说明线程同步. 如果有多个线程同时访问共享数据的时候,就必须要用线程同步,防止共享数据被破坏.如果 ... 
- 写一个Android输入法01——最简步骤
			本文演示用Android Studio写一个最简单的输入法.界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点. 1.打开Android Studio创建项目,该项目和普通APP的 ... 
- 「BZOJ 1791」「IOI 2008」Island「基环树」
			题意 求基环树森林所有基环树的直径之和 题解 考虑的一个基环树的直径,只会有两种情况,第一种是某个环上结点子树的直径,第二种是从两个环上结点子树内的最深路径,加上环上这两个结点之间的较长路径. 那就找 ... 
- [LeetCode] 92. Reverse Linked List II_Medium tag: Linked List
			Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ... 
- go语言实战教程之管理员查询功能、退出功能
			前面第10节课内容中已经学习开发完成了管理员登陆功能.本节课我们将继续学习开发完成管理员信息查询功能.管理员退出功能 管理员信息查询功能 请求及路由映射 管理员信息查询接口 接口名称:获取管理员信息. ... 
- 教主的花园 dp
			题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢333种树,这3 ... 
- kuangbin专题十六 KMP&&扩展KMP HDU3294 Girls' research
			One day, sailormoon girls are so delighted that they intend to research about palindromic strings. O ... 
- day18 约束 异常
			1. 类的约束 方案一:抛出异常,子类必须重写父类方法,否则会报错 class Base: def login(self): #强制xxx做XXX事 raise NotImplementedError ... 
