NestedScrollView嵌套RecyclerView,firstVisible和lastVisible不好用

本文主要是介绍NestedScrollView嵌套RecyclerView,firstVisible和lastVisible不好用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为nestedScrollView嵌套RecyclerView之后,RecyclerView计算的高度大小最总大小,因此firstvisible永远是0,last永远是最后一个。

 

为了实现视频滑出屏幕就停止播放,只需要监听NestedScrollView的滑动距离,然后获取子View的位置,判断是否在范围内即可。

 

package com.bizrun.hibao.personalzone;import android.support.v7.widget.RecyclerView;
import android.view.View;import com.bizrun.hibao.utils.ScreenUtils;
import com.bizrun.hibao.view.HeadZoomNestScrollview;/*** Discription:必须设置nestedScrollHeight** @author sz* @date 2018/12/21*/public class HfNestedRecyclerViewUtil {private static final String TAG = HfNestedRecyclerViewUtil.class.getSimpleName();int hfOffsetY = 0;RecyclerView.LayoutManager layoutManager;//外层包裹的nestedScrollView的高度private HeadZoomNestScrollview headZoomNestScrollview;public HfNestedRecyclerViewUtil(RecyclerView.LayoutManager layoutManager) {this.layoutManager = layoutManager;}/*** 设置外层高度* @param nestedScrollView*/public void setNestedScrollView(HeadZoomNestScrollview nestedScrollView) {this.headZoomNestScrollview = nestedScrollView;}/*** 设置偏移量* @param nestedScrollOffset*/public void setOffset(int nestedScrollOffset){this.hfOffsetY = nestedScrollOffset;}/*** 判断child是否可见* @param child* @return*/public boolean isChildVisible(View child){return this.isChildVisible(child, hfOffsetY);}/*** 判断当前View是否展示* @param child* @param nestedScrollOffset*/public boolean isChildVisible(View child, int nestedScrollOffset){this.hfOffsetY = nestedScrollOffset;int start = getParentStart();int end = getParentEnd();int childStart = getChildStart(child);int childEnd = getChildEnd(child);if (childEnd > start && childStart < end){return true;}return false;}/*** 获取child的结束位置* @param view* @return*/public int getChildEnd(View view) {final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)view.getLayoutParams();return layoutManager.getDecoratedBottom(view) + params.bottomMargin + + hfOffsetY;}/*** 获取child的开始位置* @param view* @return*/public int getChildStart(View view) {final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)view.getLayoutParams();return getDecoratedTop(view) - params.topMargin;}/*** 获取child的布局位置* @param child* @return*/public int getDecoratedTop(View child) {return child.getTop() - layoutManager.getTopDecorationHeight(child) + hfOffsetY;}/**** @return*/public int getParentStart() {//48是导航高度return hfOffsetY > ScreenUtils.dip2px(48) ? hfOffsetY:ScreenUtils.dip2px(48);}public int getParentEnd() {//offset 滑动减头部if (headZoomNestScrollview == null){return 0;}return headZoomNestScrollview.getHeight();}}

 

这篇关于NestedScrollView嵌套RecyclerView,firstVisible和lastVisible不好用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/869153

相关文章

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

多个,多层嵌套module,打aar包

参考https://blog.51cto.com/4259297/1699714 1.在要打包的module中下添加fat-aar.gradle文件。(该文件只能在项目个gradle是2.3.3是才可食用) 2.把项目的gradle修改为2.3.3,但是不打包的gradle依然是以前的。 3.由于打包的的gradle和不打包的是不一样的,所以需要在修改gradle的文件中的添加判断标志

Android studio jar包多层嵌套,Add library '__local_aars__:...@jar' to classpath问题

在添加jar包,早app下的build.gradle中的 implementation files('libs/jar包的名字.jar') 修改为 api files('libs/jar包的名字.jar') implementation 单层引用,只引用当前jar包层, api 多层引用,应用当前jar包层,已经jar包引用的jar包层

vue el-dialog嵌套解决无法点击问题

产生原因: 当你在 el-dialog 上嵌套另一个 el-dialog 窗口时,可能会遇到内部对话框无法点击的问题。这通常是由于嵌套对话框的遮罩层(overlay)或其他样式问题造成的。 解决方案: 如果你的 el-dialog 组件支持 append-to-body 属性,你可以将对话框附加到 body 元素上,以避免 z-index 问题。 <template><el-dialo

14,子查询语句嵌套

1.1 查询研发部门的所有员工信息 #步骤1: 查询研发部门的 did SELECT did FROM t_department WHERE dname = '研发部'; #步骤2: 嵌套子查询,查询员工信息 SELECT * FROM t_employee WHERE did = (SELECT did FROM t_department WHERE dname = '研发部');