ViewPager 基本介绍

ViewPager 基本介绍

ViewPager常用于页面切换,轮播图等效果,非常不错的android控件,下面记录下我的使用过程。

 

1、自动播放轮播图实现

      1)ViewPagerAdapter的实现

      (1)在ViewPagerAdapter的getCount()方法中返回Integer.MAX_VALUE,该方法将返回所包含的 Item总个数。

                为了实现一种循环滚动的效果,返回了基本整型的最大值,这样就会创建很多的Item,  其实这并非是真正的无限循环。

      (2)isViewFromObject(View view, Object object)返回view == object;

      (3)destroyItem(ViewGroup container, int position, Object object)中销毁预加载以外的view对象, 会把需要销毁的对象的

               索引位置传进来,就是position,因为ImageViewList图片是有限的几条,而position将会取到很大的值, 所以使用取

               余数的方法来获取每一条数据项。

       (4)instantiateItem()同上(3);

          具体代码如下:

 

          public class ViewPagerAdapter extends PagerAdapter { 
                  private List<ImageView> mImageViewList;  
                  public ViewPagerAdapter(List<ImageView> imageViewList) { 
                         super(); 
                          this.mImageViewList = imageViewList; 
                  }  
   
                 @Override 
                 public int getCount() { 
                            return Integer.MAX_VALUE;  
                 }  
       
                  @Override  
                  public boolean isViewFromObject(View arg0, Object arg1) { 
                           return arg0 == arg1; 
                   }  
   
                   @Override 
                   public void destroyItem(ViewGroup container, int position, Object object) { 
                               container.removeView(mImageViewList.get(position % mImageViewList.size()));  
                   }  
   
                 @Override 
                 public Object instantiateItem(ViewGroup container, int position) { 
                      container.addView(mImageViewList.get(position % mImageViewList.size())); 
                      return mImageViewList.get(position % mImageViewList.size()); 
                 } 
           } 

 

        2)在使用的界面中开启个线程做自动切换,具体代码如下:

          new Thread(new Runnable() { 
 
                  @Override 
                  public void run() { 
                         while (isLoop) {  
                             handler.sendMessageDelayed(0, 1000)
                         } 
                   }  
           }).start();

 

           private Handler handler = new Handler() { 
 
                   @Override 
                    public void handleMessage(Message msg) { 
                            super.handleMessage(msg); 
 
                            mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); 
                     } 
              }; 

 

2、自定义MyViewPager,实现嵌套ViewPager中的内部ViewPager能获取手势处理

      1)在onInterceptTouchEvent()中返回true,使当前ViewPager中onTouchEvent获取事件处理

      2)在onTouchEvent()中事件中加入getParent().requestDisallowInterceptTouchEvent(true);告诉父控件自己处理。

      具体代码如下:

        @Override
        public boolean onTouchEvent(MotionEvent arg0) {
 
              switch (action) {
              case MotionEvent.ACTION_DOWN:
   
                      if (getParent() != null) {
                             getParent().requestDisallowInterceptTouchEvent(true);
                      }
                      break;
              case MotionEvent.ACTION_MOVE:

                       if (getParent() != null) {
                             getParent().requestDisallowInterceptTouchEvent(true);
                        }
                }

              return super.onTouchEvent(arg0);
         }

 

3、ViewPager滑动事件 

     1)实现OnPageChangeListener接口,OnPageChangeListener这个接口需要实现三个方法:

      (onPageScrollStateChangedonPageScrolledonPageSelected

            (1)onPageScrollStateChanged(int arg0),此方法是在状态改变的时候调用,arg0这个参数有三种状态(0,12)。

            arg0 ==1的时辰默示正在滑动,

            arg0 ==2的时辰默示滑动完毕了,

            arg0 ==0的时辰默示什么都没做。

            当页面开始滑动的时候,三种状态的变化顺序为(120),

            (2)onPageScrolled(int arg0,float arg1,int arg2),当页面在滑动的时候会调用此方法,在滑动被停止之前,

             此方法回一直得到调用。其中三个参数的含义分别为:

                     arg0 :当前页面,及你点击滑动的页面

                     arg1:当前页面偏移的百分比

                     arg2:当前页面偏移的像素位置  

      (3)onPageSelected(int arg0)此方法是页面跳转完后得到调用,arg0是你当前选中的页面的Position(位置编号)。

 

4、使用viewpager动态添加页面或者删除页面时出现了问题(Java.lang.IllegalStateException:

   The specified child already has a parent. You must call removeView() on thechild's parent first),

   解决办法是在instantiateItem中使用如下方式:

   ViewGroup parent = (ViewGroup) v.getParent();

       if (parent != null) {

           parent.removeAllViews();

       } 

   container.addView(v);

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值