Android 为TV端助力之解决ViewPager嵌套RecyclerView水平滑动问题
public class MyViewPager extends ViewPager {
    private RecyclerView recyclerView;
    public MyViewPager(@NonNull Context context) {
        super(context);
    }
    public MyViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }
   public void setView(RecyclerView recyclerView){
        this.recyclerView = recyclerView;
   }
    private int startX, startY;
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if(null != recyclerView){
            switch (ev.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startX = (int) ev.getX();
                    startY = (int) ev.getY();
                    getParent().requestDisallowInterceptTouchEvent(true);
                    break;
                case MotionEvent.ACTION_MOVE:
                    int endX = (int) ev.getX();
                 //第一种方法
//                    int endY = (int) ev.getY();
//                    int disX = Math.abs(endX - startX);
//                    int disY = Math.abs(endY - startY);
//                    if(disX > disY){
//                        getParent().requestDisallowInterceptTouchEvent(canScrollHorizontally(startX -endX));
//                    }else {
//                        getParent().requestDisallowInterceptTouchEvent(canScrollVertically(startY -endY));
//                    }
                    //第二种方法
                    if(endX>startX){ //表示向左滑动
                        isVisTop(recyclerView);
                    }else if(endX<startX){//向右滑动
                        isVisBottom(recyclerView);
                    }
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    getParent().requestDisallowInterceptTouchEvent(false);
                    break;
            }
            return super.onInterceptTouchEvent(ev);
        }else{
            return super.onInterceptTouchEvent(ev);
        }
    }
    public static boolean isVisBottom(RecyclerView recyclerView){
        LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        //屏幕中最后一个可见子项的position
        int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
        //当前屏幕所看到的子项个数
        int visibleItemCount = layoutManager.getChildCount();
        //当前RecyclerView的所有子项个数
        int totalItemCount = layoutManager.getItemCount();
        //RecyclerView的滑动状态
        int state = recyclerView.getScrollState();
        if(visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1 ){
            return true;
        }else {
            return false;
        }
    }
    public static boolean isVisTop(RecyclerView recyclerView){
        LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        //屏幕中最后一个可见子项的position
        int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
        //当前屏幕所看到的子项个数
        int visibleItemCount = layoutManager.getChildCount();
        //当前RecyclerView的所有子项个数
        int totalItemCount = layoutManager.getItemCount();
        //RecyclerView的滑动状态
        int state = recyclerView.getScrollState();
        if(visibleItemCount > 0 && lastVisibleItemPosition <visibleItemCount){
            return true;
        }else {
            return false;
        }
    }
}
重新viewPager拦截器onInterceptTouchEvent方法,如上面所示,滑动最左边或者最右边的时候就返回true拦截监听,交给viewPager自己处理,如果不是那就返回false,向下传递
Android 为TV端助力之解决ViewPager嵌套RecyclerView水平滑动问题的更多相关文章
- Android为TV端助力之解决setOnItemSelectedListener一进来就自动执行一次的问题
		我们经常会遇到listview或者其他view设置setOnItemSelectedListener监听时,一加载界面,setOnItemSelectedListener监听就会自动执行一遍,导致你第 ... 
- Android 解决ScrollView嵌套RecyclerView导致滑动不流畅的问题
		最近做的项目中遇到了ScrollView嵌套RecyclerView,刚写完功能测试,直接卡出翔了,后来通过网上查找资料和 自己的实践,找出了两种方法解决这个问题. 首先来个最简单的方法: recyc ... 
- Android为TV端助力 doc里面adb连接出现问题的解决方法
		第一保证连接的两边都是有网的 第二 就是网上常说的1.adb kill-server 2.adb start-server 3.adb remount 但是在运行adb remount有可能会提示 ... 
- Android为TV端助力 自定义view中findViewById为空的解决办法
		网上说的都是在super(context, attrs);构造函数这里少加了一个字段, 其实根本不只这一个原因,属于view生命周期的应该知道,如果你在 自定义view的构造函数里面调用findVie ... 
- Android为TV端助力 eclipse出现感叹号的解决办法
		当eclipse导入项目出现红叉但无提示错误时,去看:1>菜单路径----Window/Show View/Console2>菜单路径----Window/Show View/Error ... 
- Android为TV端助力 转载:RecyclerView分页加载
		package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ... 
- Android为TV端助力转载:码农小阿飞(SpannableString)
		用SpannableString打造绚丽多彩的文本显示效果 引语 TeXtView大家应该都不陌生,文本展示控件嘛! 就用TextView显示普普通通的文本,OK,很简单,Android入门的都会,没 ... 
- Android为TV端助力(转载)
		作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ... 
- Android为TV端助力 转载:android MVC设计模式
		Controller控制器 import android.app.Dialog; import android.app.ProgressDialog; import android.os.Bundle ... 
随机推荐
- mysql原生sql处理,按逗号拆分列为多行
			举例: id value 1 1,2,3,4 2 2,3,4,5,6 拆分成: id value 1 1 2 2 3 3 4 4 5 5 6 6 ),) ) distinct:去重复操作 a.valu ... 
- Xamarin.FormsShell基础教程(2)创建Shell解决方案
			Xamarin.FormsShell基础教程(2)创建Shell解决方案 创建Shell解决方案 在开发Shell的应用程序时,首先需要创建一个Shell解决方案,其具体操作步骤如下: (1)在VS的 ... 
- 【转】Python查找某文件夹下的所有excel文件
			# -*- coding: utf-8 -*- # author:baoshan import os dirname = r'D:\0.shenma\01.聊城资料\01.数据资料\02.聊城年鉴数据 ... 
- Invalid prop: custom validator check failed for prop "pagination" <Table> vue.runtime.esm
			错误如图 原因,返回数据中没有包括分布的属性 
- linux 安装 btrace
			1.下载btrace https://github.com/btraceio/btrace/releases/download/v1.3.8.3-1/btrace-bin-1.3.8.3.tgz2.上 ... 
- 发布你自己的Nuget包
			①安装NuGetPackageExplorer 来帮助我们发布你的包. ②https://www.nuget.org/ 创建你的apikey ③新建一个asp.net的空项目,并且安装nuget.se ... 
- python中空列表判断方法总结,欢迎补充
			--代码-- if __name__ == '__main__': l = [] print(l.__len__() == 0) print(l.__sizeof__() == 40) print(l ... 
- 用Scratch制作一个Hello World程序
			网上出现了很多Hello World程序,看的小编心里也痒痒的,为此这次作为南京小码王Scratch培训机构的小编,就为大家来详细的了解下Scratch制作Hello World程序的过程,现在就和小 ... 
- 如何同时读取 TDateTimePicker 的 Date 和 Time ?
			由于 TDateTimePicker 只能用于日期或时间,不能同时使用.如果将Kind属性设置为dtkDate,则可以指定自定义DATE格式,但忽略任何TIME格式,并且Time未定义使用该属性.如果 ... 
- Python之路【第十二篇】:Python面向对象高级
			一.反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究 ... 
