Android系统中使用ViewPager实现画廊效果的应用
作者:温晓宇 宋伟奇
来源:《电脑知识与技术》2015年第06
        摘要:在Android应用中用户少不了要使用照片浏览应用软件,但在该类应用的开发中不少开发者还在使用Gallery画廊组件实现。这样既容易造成无法控制每次滑动只滑动一页,也容易导致无法修改第一项与Gallery的左边距,影响用户交互的体验。该文将介绍如何使用ViewPager组件解决上面的问题。
        关键词:ViewPager组件;页面布局;画廊
        中图分类号:TP37 文献标识码:A 文章编号:1009-3044201506-0207-01
        1 概述
        在早期Android应用开发中,不少相册浏览应用都使用Gallery画廊组件实现。但是,在使用Gallery的时候大家会发现有几个问题:一是无法控制每次滑动只滑动一页,二是Gallery默认第一个item居中,无法修改它与Gallery的左间距。在最新的Android API中,开发者可以使
ViewPager组件及androidclipChildren属性解决这个问题,在屏幕上显示多个Fragment
        2 ViewPager组件简介
        ViewPager组件用于实现多页面的切换效果。ViewPagerandroid扩展包v4包中的类,这个类可以让用户左右切换当前的view。在使用ViewPager时需要注意几点::
        1ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
        2ViewPager类需要一个PagerAdapter适配器类给它提供数据。
        3ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapterFragmentStatePagerAdapter类供Fragment中的ViewPager使用。
        在编写ViewPager的应用时,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承Pag
erTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XMLlayout的时候,这两个类必须是ViewPager标签的子标签。
        3 使用ViewPager实现画廊效果
        要实现相册软件中的画廊效果,开发应用时应包括两个步骤,一是设计UI界面,二是编写实现功能的Java类。
        3.1 定义xml布局页面
        Android项目中,在相关布局页面中需要导入Android扩展包,并添加ViewPager组件,设置其宽、高、idlayout_gravityclipChildren属性。参考设计代码如图1
        发现上面的RelativeLayout(可以用其他layout替换)和ViewPagerandroidclipChildren都设置为了falseandroidclipChildren表示是否限制子View在其范围内,在animations动画以及本文的情况下可以发挥很大的作用。默认为true
        3.2 实现Java
        在编写实现画廊效果的Java类时,主要使用了ViewPager类对象及其相关方法,并配合数据适配器PagerAdapter类,通过重写该类的若干方法来实现数据的填充,实现照片的显示。
        a.ViewPager设置
        需要setOnPageChangeListener,在onPageScrolledint position float positionOffset int positionOffsetPixels)函数中不断刷新layout。部分关键代码如图2
        setOffscreenPageLimit表示设置缓存,这样左右拖动即可看见后面的FragmentsetPageMargin表示设置Fragment之间的间距。
        b. FrameLayout设置
        需要在setOnTouchListener函数中将滑动事件传递给viewPager,否则只有viewPager中间的view可以滑动,设置后整个viewPager都可以滑动。部分关键代码如图3
       
        可能运行后出现viewpager的部分Fragment无法看见或是突然消失的问题,请确保RelativeLayoutandroid layout布局ViewPagerandroidclipChildren都设置为了false并且viewPager.setOffscreenPageLimitTOTAL_COUNT);其中TOTAL_COUNT大于0. 当然子Fragment本身不能是match_parentviewpager设置了paddingTop也会导致无法实现画廊而只是显示一屏。
        4 结束语
        本文以Android平台上用户经常使用的照片浏览软件为例,介绍了使用ViewPager组件实现画廊效果的方法,与使用传统的Gallery组件相比,使用ViewPager组件更能提高用户使用该类应用的交互体验。
        参考文献:
        [1] 李刚.疯狂Android讲义[M].北京:电子工业出版社,2013.
        [2] Chris Haseman.Android应用开发[M].北京:人民邮电出版社,2013.
        [3] 王云林.Android应用中跨版本集成新特性的研究与实现[D].上海:东华大学计算机系,2013.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。