Android 获取ListView滚动距离方法

2023-05-16

今天想做个导航栏渐变的效果,原来这种效果是通过监听ScrollView的滚动距离实现的。由于首页图片较多,而且里面还嵌套了ListView,大家都知道ListView嵌套在ScrollView中是需要计算高度然后全部显示出来的,这样ListView中的所有图片就需要全部加载出来。在图片做了缓存的情况下,进入页面还是会有明显的卡顿。这时我就去掉了ScrollView,这个页面只用ListView实现。

ScrollView滚动距离监控:

scrollView.setScrollViewListener(new ScrollViewListener() {
	
	@Override
	public void onScrollChanged(CustomScrollView scrollView, int x, int y,
			int oldx, int oldy) {
		// TODO Auto-generated method st
	}
});
ListView滚动距离监控:在网上找了很多,什么getScrollY();方法,什么重写ListView中的onScrollChanged等

http://blog.csdn.net/dacainiao007/article/details/28268395

http://my.oschina.net/u/1177694/blog/504992

这都试过了,基本都不好用。最后终于找到下面的文章:

http://www.2cto.com/kf/201507/416142.html

实现代码:

listview.setOnScrollListener(new OnScrollListener() {
	private SparseArray recordSp = new SparseArray(0);
	private int mCurrentfirstVisibleItem = 0;
	
	@Override
	public void onScrollStateChanged(AbsListView arg0, int arg1) {
		// TODO Auto-generated method stub
	}
	
	@Override
	public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
		// TODO Auto-generated method stub
		mCurrentfirstVisibleItem = arg1;
		View firstView = arg0.getChildAt(0);
		if (null != firstView) {
			ItemRecod itemRecord = (ItemRecod) recordSp.get(arg1);
			if (null == itemRecord) {
				itemRecord = new ItemRecod();
			}
			itemRecord.height = firstView.getHeight();
			itemRecord.top = firstView.getTop();
			recordSp.append(arg1, itemRecord);
			int h = getScrollY();//滚动距离
			}
		}
	}
	
	private int getScrollY() {
		int height = 0;
		for (int i = 0; i < mCurrentfirstVisibleItem; i++) {
			ItemRecod itemRecod = (ItemRecod) recordSp.get(i);
			height += itemRecod.height;
		}
		ItemRecod itemRecod = (ItemRecod) recordSp.get(mCurrentfirstVisibleItem);
		if (null == itemRecod) {
			itemRecod = new ItemRecod();
		}
		return height - itemRecod.top;
	}


	class ItemRecod {
		int height = 0;
		int top = 0;
	}
});

二、获取滚动高度

public int getScrollY() {
    View c = listview.getChildAt(0);
    if (c == null) {
        return 0;
    }
    int firstVisiblePosition = listview.getFirstVisiblePosition();
    int top = c.getTop();
    return -top + firstVisiblePosition * c.getHeight() ;
}
三、单位时间滚动指定高度

ListView.smoothScrollBy(h, t);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 获取ListView滚动距离方法 的相关文章

随机推荐

  • 最右的一道面试算法题,--特殊基因

    题目描述 小右发现某种特殊基因片段可以使人类拥有某种超能力 xff0c 比如飞翔 xff0c 隐身 xff0c 时光倒流等等 他想找到拥有这些超能力的人 一个人要想拥有超能力当且仅当他的基因编码里包含至少一个特殊基因片段作为子串 请编写程序
  • 布隆过滤器原理和仿写

    1 作用 布隆过滤器是一个防止黑客恶意攻击的宝器 xff0c 布隆过滤器可以与redis结合使用 xff0c 能够有效地防止redis缓存穿透 先将全数据 xff0c 存放到过滤器中 当黑客访问时 xff0c 会携带访问数据 xff0c 去
  • 多线程测试力扣练习题

    1115 交替打印FooBar 给定一个类 class FooBar public void foo for int i 61 0 i lt n i 43 43 print 34 foo 34 public void bar for int
  • 2021-09-12

  • 2021-09-12

  • 2021-10-14

  • 【无标题】

    学生成绩管理
  • 【无标题】

    零售业管理
  • Android中ScrollView使用详解

    滚动视图 xff08 ScrollView xff09 是指当拥有很多内容 xff0c 屏幕显示不完时 xff0c 需要通过滚动来显示完整的视图 包括水平滚动视图 xff08 HorizontalScrollView xff09 和垂直滚动
  • 【JAVA】快速排序

    快排 xff0c 和冒泡排序一样 xff0c 是同一类型的排序 xff0c 都是交换排序 交换 xff0c 涉及在遍历中比较 xff0c 然后相互交换元素 冒泡排序是根据趟数两两比较 xff0c 边比较边交换 xff0c 快排也一样 xff
  • 二叉树C语言构建及功能实现

    关于二叉树 xff0c 出现的印象一般就是一个 丫 字 xff0c 这看似没有毛病 xff0c 但其实也真没有什么毛病 xff0c 逻辑上的二叉树差不多就是这个样子 可是当我们已经在逻辑上构建好了二叉树之后 xff0c 真的不想去动手实现实
  • Spring项目的创建和使用

    目录 Spring项目的创建和使用 1 创建Spring项目 1 1基于maven创建项目1 2 在maven项目中添加Spring核心包 1 3 创建一个启动类 2 将对象存储到Spring中 2 1创建一个业务对象 2 2将业务对象储存
  • 二叉树创建的两种方法(图解)

    目录 一 括号表示法 xff08 1 xff09 括号表示法构建二叉树的算法思路及算法实现 xff08 2 xff09 图解括号表示法构建二叉树 xff08 3 xff09 测试程序 二 扩展二叉树 xff08 1 xff09 扩展二叉树构
  • 【嵌入式Linux】手机连接Linux系统的adb操作

    目录 手机连接Linux系统的adb操作过程adb控制指令测试 手机连接Linux系统的adb操作过程 通过了解 xff0c 安卓的底层也是Linux xff0c 这样我们就可以通过Linux控制安卓手机完成一系列指令 xff0c 在这里需
  • GUI(图形用户界面)之事件处理

    Swing组件中的事件处理专门用于响应用户的操作 xff0c 例如 xff0c 响应用户的鼠标单击 按下键盘等操作 在Swing事件处理的过程中 xff0c 主要涉及三类对象 xff1a 1 事件源 xff1a 事件发生的场所 xff0c
  • 实验3:生产者消费者问题实践(编程实验)

    第1关 xff1a 生产者消费者问题实践 任务要求 xff1a 生产者 消费者之间设置一个具有n个缓存区的缓冲池 xff0c 生产者进程将他所生产的产品放入一个缓冲 xff1b 消费者进程可以从一个缓冲区中取走产品去消费 老板不允许消费者进
  • Arrays常用方法(超详解)

    博客网站地址 http xiaohe blog top 目录 导包 1 Arrays toString 方法 2 Arrays sort 方法 3 Arrays equals 方法 4 Arrays binarySearch 5 Array
  • Maven,MyBatis详解

    本章是博主对maven和mybatis的个人理解 xff0c 希望对大家有帮助 文章目录 文章目录 一 Maven简介 xff1a 二 MyBatis介绍 xff1a 总结 xff1a 一 Maven简介 xff1a 1 Maven是专门用
  • maven配置阿里镜像,解决IDEA配置maven恢复默认配置问题

    文章目录 1 三个IDEA配置说明2 拷贝与修改settings xml2 1 找到IDEA的mave配置文件settings xml位置2 2 拷贝IDEA的settings xml到 m2目录下2 3 打开settings xml xf
  • Android 获取ListView滚动距离方法

    今天想做个导航栏渐变的效果 xff0c 原来这种效果是通过监听ScrollView的滚动距离实现的 由于首页图片较多 xff0c 而且里面还嵌套了ListView xff0c 大家都知道ListView嵌套在ScrollView中是需要计算