android Viewpager控件使用随笔

来源:互联网 发布:做微课用什么软件 编辑:程序博客网 时间:2024/06/06 05:57

当前功能是使用ViewPager实现一个像页面滑动展示图片的功能效果如图所示,左右滑动可以删除当前图片,稍记一下笔记。


  实现抽象类适配器PagerAdapter类,实现方法getCount()、 isViewFromObject(View view, Object obj)、destroyItem(View container, int position, Object object)、instantiateItem(View container, int position)
   1,getCount()是判断有多少子控件
   2,isViewFromObject()判断是否新建一个控件,不清楚啥作用
   3,、destroyItem销毁一个子控件,Viewpager不会一次将所有子控件创建出来,第一次显示的时候会显示第一个子控件和等待在右侧的第二个子控件,当屏幕向左滑动到第二个子控件显示后会再初始化第三个子控件,
   再滑动到第三个子控件的时候会将第1个子控件销毁,并初始化第四个子控件。依次类推,ViewPager的子控件最多有3个,调用viewPager.getChildCount()可以查看当前控件的子控件总数,发现不会大于3.
   4,instantiateItem初始化控件,当屏幕向左、右滑动时调用,初始化当前显示子控件左右两侧的兄弟控件,用来在左右滑动过程中替换显示。

  5,本功能中要求删除动态删除图片来改变ViewPager的子控件,是这样实现的:

adapter.removeImageView(position);
imagesPath.remove(position);
viewPager.destroyDrawingCache();
viewPager.setAdapter(adapter);
viewPager.invalidate();


记录一个细节问题:

在destroyItem()销毁子控件和instantiateItem()初始化控件方法中有一细节知识,

((ViewPager) container).removeView(views.get(position% views.size()));

这里添加时调用的是views.get(position&views.size()),而不是直接调用views.get(position)

((ViewPager) container).addView(views.get(position % views.size()),0);

这里也是一样的情况


原因是这样的:

在ViewPager被初始化时,会先初始第第1个子控件和第2个子控件,因为滑动时要第1个和第2个过渡,所以 第2个也先预备好。这里要添加的控件集合是views

1,调用instantiateItem()初始第前两个控件,将views(1)添加到position=0的位置,那view(0)就到了第1个位置
2,向右滑动显示显示第2个控件会初始化第3个控件,view(2)在ViewPager中就变成了position=0,view(1)就变成了position=1,view(0)就变成了position=2
3,再向右滑动显示第三个控件就会初始化第四个控件,view(3)就变成了position=0,view(2)变成了position=1,view(1)就变成了position=2,这里调用destroyItem()方法要销毁
view(0)控件,position这里值是3,views能显示到第三个控件说明size>3,所以position%views.size()肯定是0了,这样才能销毁views(0)


0 0
原创粉丝点击