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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • XLSTransformer生成excel一个简单的演示示例文件

    XLSTransformer生成excel一个简单的演示示例文件项目结构图:在这些项目中使用jar。可以http://www.findjar.com/index.x下载ExcelUtil类源代码:packageutil;importjava.io.IOExce

    2022年7月2日
    30
  • 最短路径问题—Dijkstra算法详解

    最短路径问题—Dijkstra算法详解前言Nobodycangobackandstartanewbeginning,butanyonecanstarttodayandmakeanewending.Name:WillamTime:2017/3/81、最短路径问题介绍问题解释:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径解决问题的算法:…

    2022年6月4日
    30
  • javaScript系列:js中获取时间new Date()详细介绍

    varmyDate=newDate();myDate.getYear();//获取当前年份(2位)myDate.getFullYear();//获取完整的年份(4位,1970-????)m

    2021年12月27日
    55
  • 变量命名神器Codelf

    变量命名神器Codelf网站首页

    2022年5月4日
    50
  • hostapd配置

    hostapd配置我们有个闲置的USB无线适配器(WIFI适配器),而我们的ISP路由器却是有线的。怎样把我们的家庭NAS服务器变成无线访问点(WAP),在不用买额外的WPA盒子的情况下,在Debian或Ubuntu系统下使用无线设备访问到它?你需要使用hostapd作为访问点和认证服务器。它实现了IEEE802.11访问点管理,IEEE802.1X/WPA/WPA2/EAP授权,RADIUS客户端,…

    2022年5月21日
    220
  • 工作流引擎Activiti系列(一)——初识[通俗易懂]

    工作流引擎Activiti系列(一)——初识[通俗易懂]1、介绍  几乎任何一个公司的软件开发都会涉及到流程,以往我们可能是这么实现的:业务表添加标志位标识流程的节点状态,关联批注表实现审核意见,根据一些业务数据分析处理逻辑,分配任务到用户,节点的调度,审批等…..这其实是很繁琐的,且不说开发起来比较混乱,维护起来更是难上加难:     Activiti刚好就能解决几乎所有的这些问题,当流程开发变得简单有趣。  官网:

    2025年7月14日
    3

发表回复

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

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