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


相关推荐

  • C#最简单最完整的webservice实例「建议收藏」

    C#最简单最完整的webservice实例「建议收藏」
     在我博客已经 有了,不想再重复,可以去看看
     http://fyinthesky.blog.163.com/blog/static/3555251720110115227337/

    2022年7月21日
    13
  • AppSync for iOS7安装教程、Cydia软件源安装AppSync补丁

    AppSync for iOS7安装教程、Cydia软件源安装AppSync补丁么是ipa补丁ipa补丁在Cydia里的名称是ApPSync for iOS(版本号),是在越狱之后,通过同步itunes安装破解过的后缀名格式为.ipa软件,所用到的补丁。AppSyncforiOS7怎么安装?以下为安装步骤:将设备至于wifi环境下,打开越狱后新增的Cydia底部状态栏点击 管理,选择软件源点击右上角 编辑 然后点击左上角的 添加

    2022年6月12日
    126
  • pycharm字体变大快捷键_调整字体大小在哪里

    pycharm字体变大快捷键_调整字体大小在哪里在PyCharm的中文界面中,如何自定义热键,调整代码编辑界面的字体大小。进入PyCharm》文件》设置》键盘映射在键盘映射界面内的搜索框,搜索“字体”》找到‘增大字体’并双击》点击‘添加鼠标快捷键’然后看见有界面弹出后,直接按住‘Ctrl键、滑动滚轮向上’放大字体快捷键设置好后,缩小字体同理。字体放大和缩小都设置好后,记得应用+确定回到代码编辑界面,发现已经可以通过Ctrl+滚动滚动鼠标来控制字体大小。最后就可以快乐的敲代码了。…

    2022年8月28日
    2
  • ov7725摄像头人脸识别_监控摄像头图像倒置怎么办

    ov7725摄像头人脸识别_监控摄像头图像倒置怎么办前言:摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D[1](模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再传输给其他显示硬件就可以显示看到图像了我要讲解的是0V7725摄像头,带FIFO缓存,以及通过STM32F103MCU进行控制,在采用ILI9341控制器芯片的液晶屏(分辨率240*32

    2022年9月15日
    0
  • 调用so库文件以及里面的方法「建议收藏」

    调用so库文件以及里面的方法「建议收藏」之前文章写过一篇JNI生成so库文件 并调用里面的方法手把手教你—JNI的实现实际开发中 so库是别人给你的,不是你自己写的没所以就要用别人的so库文件。有很多情况,有一种是比较简单的:既有so库文件又有对应的jar包,这样的话 直接就可以调用里面的方法了。第二种比较坑爹,限制也比较多,所以现在就主要研究一下第二种吧(只有so库 其他什么都没有)第一

    2022年6月16日
    37
  • centos安装git命令_linuxjdk安装

    centos安装git命令_linuxjdk安装一、查看是否安装过git,git–version若出现以上版本号,则代表已经安装了git,不需要再次安装了,否则就安装其实安装的话,分为用yum安装和下载git源码编译安装。但是cetos5以及以下版本中的yum都没有git,无法使用yum安装,而cetos6可以使用yum安装git,但是安装的git是1.7.1版本的,而github需要的git版本最低都不能低于1.7.2。所以如…

    2022年4月20日
    61

发表回复

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

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