VeiwPager、Gallery、ViewFlipper区别

来源:互联网 发布:腾讯云mysql 外网连接 编辑:程序博客网 时间:2024/05/22 15:08

ViewFlipper继承ViewAnimator,切换view的时候是有动画效果的,适合做ppt,多界面的程序欢迎引导界面,算是个轻量级的组件,适合展示静态数据,少量数据。

 

ViewPager继承ViewGroup。看官网描述,这货和Fragment是好搭档,Fragment有自己的生命周期。也就是说ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载。


android的轮播图实现有多种方法,首先可以用gallery,不过这种方式已经过时,现在google官方推荐用viewpager来实现,同时viewflipper也可以实现,接下来我讲一下这三种方式在实现上的区别:

       1、先说gallery,画廊的意思,一个锁定中心条目并且拥有水平滚动列表的视图,其使用galleryItemBackground作为Gallery适配器中的各视图的默认参数。如果你没有设置,你就需要调整一些Gallery的属性,比如间距spacing,

画廊中的视图应该使用Gallery.LayoutParams(作为Gallery的内部类)作为它们的布局参数类型。

继承关系

         public class Gallery extends AbsSpinner

implements GestureDetector.OnGestureListener

java.lang.Object

   android.view.View

           android.view.ViewGroup

                   android.widget.AdapterView<T extends android.widget.Adapter>

                           android.widget.AbsSpinner

                                   android.widget.Gallery

具体的提供的公共方法与保护方法,可参考农民伯伯的中文api文档。

  2、ViewFlipper是android提供的一个view容器类,继承于ViewAnimator类,被添加到ViewFlipper中的两个或两个以上的视图之间将执行一个简单的ViewAnimator动画。一次仅能显示一个子视图。如果需要,可以设置间隔时间使子视图像幻灯片一样自动显示。


    Xml中的属性

       android:autoStart   是否自动自动动画,属性值为boolean

      android:flipInterval   显示下一个视图的时间间隔

  

       公共方法:

           boolean  isAutoStart()    视图显示到窗口上时是否会调用startFlipping()方法

          boolean  isFilpping()   子视图是否正在切换

          boolean  setAutoStart(boolean)  设置视图显示到窗口上时是否会调用

startFlipping()方法

          boolean  setFlipInterval(int )  设置子视图间切换的时间间隔  ,参数为毫秒数

          boolean  startFlipping()   开始在子视图间定时循环切换

          boolean   stopFlipping()    停止切换


        如果需要在视图上加入手势滑动跟视图切换时的渐变效果(由明到暗,或者由暗到明),可是通过android.view.GestureDetector类检测各种手势事件实现的,该类有两个回调接口(Interface):

       A、GestureDetector.OnDoubleTapListener,用来通知DoubleTap双击事件,类似于鼠标的双击事件,接口三个抽象回调方法     

      B、GestureDetector.OnGestureListener,用来通知普通的手势事件(down、longPress、scroll、up等),接口具体的六个抽象回调函数如下

1)、onDown(MotionEvent e):down事件,表示按下事件

2)、onSingleTapUp(MotionEvent e):一次点击up事件,表示按下后的抬起事件

3)、onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件,此事件一般用于通知用户press按击事件已发生

4)、onLongPress(MotionEvent e):长按事件,down事件后up事件前的一段时间间隔后(由系统分配,也可自定义),如果仍然按住屏幕则视为长按事件

5)、onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件,例如scroll事件后突然up,fling的速度大小由e每秒x和y改变大小决定

6)、onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件,即down按下点——scroll拖动——up抬起点的move移动事件

       3、ViewPager是在android.support.v4包里面,利用它,我们可以做splash界面中开机引导,或者页面菜单等,使用它与使用listview一样,需要用到适配器,ViewPager的适配器是PagerAdapter,它是基类提供适配器来填充页面ViewPager内部,ViewPager将调用它来取得所需显示的页面,而PagerAdapter数据变化时,

也会通知ViewPager。FragmentPagerAdapter或FragmentStatePagerAdapter继承自PagerAdapter。在这里需要说明一下,其实ViewPager应该和Fragment一起使用,至少谷歌官方是这么想的,但是在3.0之下,我们没有必要这么做。下面要注意,当你实现一个PagerAdapter,你必须至少覆盖以下方法:

  • Object instantiateItem(ViewGroup, int)  当需要加载新的item时,出发此方法
  • void destroyItem(ViewGroup, int, Object)  销毁多余的item
  • int getCount()  得到需要显示的item的数量
  • boolean  isViewFromObject(View, Object)   返回true代表复用view对象

FragmentPagerAdapter 继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。如文档所述,该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter


1 0
原创粉丝点击