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

相关文章

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 = '研发部');

NYOJ 16 矩形嵌套

OJ题目 : http://acm.nyist.net/JudgeOnline/problem.php?pid=16 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除

【Android】NestedScrollView的简单用法与滚动冲突、滑动冲突

一、NestedScrollView 1. 什么是 NestedScrollView NestedScrollView 是 Android 中一个用于处理垂直方向滚动的布局组件,它继承自 FrameLayout,同时支持嵌套滑动(Nested Scrolling)机制。相比于传统的 ScrollView,NestedScrollView 专为解决嵌套滚动冲突问题设计,能够与其他支持嵌套滑动的子

if语句:嵌套if

在if else语句中,else可以与另一个if语句连用,构成多层判断。 比如:要求输入一个整数,判断输入的整数是0,还是正数或负数。请看如下代码: #include <stdio.h>int main(){int num=0;scanf("%d",&num);if(num==0)printf("输入的数字是0\n");else if(num>0)printf("是正数\n")

redis 实现单位时间内错误记录 时间到key值就被清除------最近脑子不好使觉得还是写个博客试试

直接在客户端操作的, 所以需要redis的简单命令  去对比JAVA客户端jedis的命令就行   添加---set     格式 set  key  value  EX time(秒)   如果这个time不添加的话 ,那默认就是 永久 获取--get    格式 get key  ---查看剩余时间    格式 TTL key ---实现key实现自增: inrc key