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);
	}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 免费申请国外免费域名超详细教程

    免费申请国外免费域名超详细教程1.首先申请免费域名网站:https://my.freenom.com/domains.php2.填入域名,这里我们以xcflag为列(尽量选择复杂一点的或者五个字母以上的域名,因为简单的有些域名是需要收费的),点击检查可用性。3.可以看到很多免费的域名(用的谷歌翻译插件,翻译有时候不是很准确,free翻译过来应该是免费而不是自由,之后会写一些关于谷歌插件的笔记,详细讲解)4.我们选择xcflag.tk点击立即获取,稍等一会点击购物车查看绿色按钮5.默认三个月试用,这里下拉框我们选择十二个月

    2022年6月30日
    95
  • pycharm如何连接远程服务器_pycharm如何使用远程解释器

    pycharm如何连接远程服务器_pycharm如何使用远程解释器pycharm提供了很方便的与服务器同步代码,并执行的插件。我在配置的时候遇到了个问题,后来折腾了两天,最后终于解决了,在此记录下配置的过程和怎么解决的。目的:pycharm连接远程的服务器,然后在本地写代码,自动提交服务器并且在服务器执行,结果显示在本地console。坑:设置ssh的配置没问题,本地与远程项目也同步了,远程的python解释器也指定了,但是跑代码遇到无法连接到远程con…

    2022年8月26日
    2
  • 电子元器件/模块供应商汇总

    电子元器件/模块供应商汇总本榜单内的35家企业中,上市/拟上市公司有11家、官方自愿披露数据的企业有16家,累计约占总样本数的80%;非官方来源的第三方佐证数据有8个,约占20%。中电港产品线:3PEAK、华大北斗、AMD、Amlogic、AMS、Barefoot、上海贝岭、BOSCH、Centec、Dialog、DatangNXP、奇鲸科技、Dynax、EPSON、复旦微电子、Gemalto、HDSC、Hosonic、ISSI、Lattice、Liteonsemi、Maxim、MAXLINE…

    2022年6月16日
    28
  • 简述CloudSim的仿真步骤_进程调度的两种方式

    简述CloudSim的仿真步骤_进程调度的两种方式Cloudsim3.0.3中VM调度策略系列类解析(带迁移的策略)注:本文为旧文的markdown重制版Cloudsim中VM调度策略类在DataCenter(或PowerDataCenter)创建时需要制定,更是我们在Cloudsim上试验我们的调度算法的核心所在。CloudSim中给出了VmAllocationPolicy抽象类,还有提供了一个VmAllocationPolicy…

    2022年10月11日
    0
  • paip.提高工作效率–数据绑定到table原则和过程Angular js jquery实现

    paip.提高工作效率–数据绑定到table原则和过程Angular js jquery实现

    2022年1月3日
    50
  • 自编码器原理概述_编码器结构及工作原理

    自编码器原理概述_编码器结构及工作原理个人博客:http://www.chenjianqu.com/原文链接:http://www.chenjianqu.com/show-62.html自编码器的概念自编码器(Auto-Encoder),是一种利用反向传播算法使得输出值等于输入值的神经网络,它先将输入压缩成潜在空间表征,然后通过这种表征来重构输出。自编码器由两部分组成:编码器:这部分能将输入压缩成潜在空…

    2022年10月1日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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