ViewPager获取当前显示的View[通俗易懂]

ViewPager获取当前显示的View[通俗易懂]//获取-vp当前childpublicstaticViewgetCurChild_vp(ViewPagervp){intchildCnt=vp.getChildCount();inttotalCnt=vp.getAdapter().getCount();intcurItem=vp.getCurrentItem();inttarg

大家好,又见面了,我是你们的朋友全栈君。

思路:根据vp.getCurrentItem一级vp的child数,可算出当前child在vp中的index。但是此时还不能直接用vp.getChildAt获取,因为getChildAt对应的index不一定 为vp中child实际的排列顺序(左右拖动时,打log即可验证)。此时可根据各child的x值重新排序,再用vp.getChildAt即可。

public static View getCurChild_vp(ViewPager vp) {

		int childCnt = vp.getChildCount();
		int totalCnt = vp.getAdapter().getCount();
		int curItem = vp.getCurrentItem();

		int targetIndex = 0;

		// 若"已加载child未达到应有值",则在边界 、或总数达不到limit
		if (childCnt < vp.getOffscreenPageLimit() * 2 + 1) {
			// 若-项数不足-加载所有至limit,直接返回当前
			if (childCnt == totalCnt)
				targetIndex = curItem;
			else
			// 若足
			{
				// 若在左边界(即左边child数未达到limit)
				if (curItem - vp.getOffscreenPageLimit() < 0)
					targetIndex = curItem;
				// 右边界
				else
					targetIndex = vp.getOffscreenPageLimit();
			}
		}
		// childCnt完整(即总项>childCnt,且不在边界)
		else
			targetIndex = vp.getOffscreenPageLimit();

		// 取-子元素
		List<View> vs = new ArrayList<View>();
		for (int i = 0; i < childCnt; i++)
			vs.add(vp.getChildAt(i));

		// 对子元素-排序,因默认排序-不一定正确(viewpager内部机制)
		Collections.sort(vs, new Comparator<View>() {
			@Override
			public int compare(View lhs, View rhs) {
				// TODO Auto-generated method stub
				if (lhs.getLeft() > rhs.getLeft())
					return 1;
				else if (lhs.getLeft() < rhs.getLeft())
					return -1;
				else
					return 0;
			}
		});

		// debug
		// for (int i = 0; i<childCnt; i++)
		// System.out.println("nimei>>vp-"+i+".x:"+vs.get(i).getLeft());
		// System.out.println("nimei>>index:"+targetIndex);

		return vs.get(targetIndex);
	}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163222.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java:Eclipse下载安装教程,以及Eclipse 安装汉化包的方法[通俗易懂]

    Java:Eclipse下载安装教程,以及Eclipse 安装汉化包的方法[通俗易懂]Eclipse是目前最流行的Java语言开发工具,它强大的代码辅助功能,可以帮助开发人员自动完成语法修正、补全文字、代码修复、API提示等编码工作,大量节省程序开发所需的时间。本教程使用Eclipse为开发工具,下面介绍它的安装。(1)Eclipse是一个开放源代码的项目,其官方网站是www.eclipse.org。图1所示为Eclipse官方网站的首页。图…

  • Python 数据可视化,常用看这一篇就够了

    Python 数据可视化,常用看这一篇就够了文章目录前言可视化视图分为4类,散点图折线图直方图条形图箱线图饼图热力图蜘蛛图二元变量分布成对关系总结前言如果你想要用Python进行数据分析,就需要在项目初期开始进行探索性的数据分析,这样方便你对数据有一定的了解。其中最直观的就是采用数据可视化技术,这样,数据不仅一目了然,而且更容易被解读。可视化视图分为4类,比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;联系:查看两个或两个以上变量之间的关系,比如散点图;构成:每个部分占整体的百分比,或者是随着时间的百

  • Center OS 7 下的安装Apache「建议收藏」

    Center OS 7 下的安装Apache「建议收藏」使用yum安装,直接yuminstallhttpd

  • 验证码识别(Tess4J初体验)

    验证码识别(Tess4J初体验)遇到一道机试题当时就懵逼了0.0查了好多资料,大体知道了基本的步骤:1.预处理2.灰度化3.二值化4.去噪5.分割6.识别还好题目要求不严格,可以使用开源程序。机智的我还真找到一个:Tesseract下面开始正文:Tess4J官方描述:AJavaJNAwrapperforTesseractOCRAPI.1.先去官网下载:http://

  • linux进程管理命令使用_shell进程

    linux进程管理命令使用_shell进程Linux进程管理、服务管理、软件包管理(rpm、yum)详细讲解。

  • Mysql decimal(m,d)的说明

    Mysql decimal(m,d)的说明看了一些博客,觉得很多都是复制的,不如自己亲测一篇:createtabledecimal_test(idintauto_incrementPRIMARYkey,scoredecimal(5,2)–取值范围是-999.99到999.99);–整数的位数必须小于等于m-d,不然报错。小数的位数可以大于d位。多…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号