常用控件(五) :Viewpager 划动 与 循环划动

1 . Viewpager  划动  :

              使用viewpager实现划动很容易,只需要设置简单是适配器即可,

 

/**
  * 划动适配器
  * @author Administrator
  *
  */
 class MyPagerAdapter extends PagerAdapter{

  public ArrayList<View> views;  //数据集合
     public MyPagerAdapter (ArrayList<View> views){
      this.views = views;
     }
     
     @Override
  public boolean isViewFromObject(View arg0, Object arg1) {
   return arg0 == arg1;
  }
  
  @Override
  public int getCount() {
   return views.size();
  }

  @Override
  public void destroyItem(View container, int position, Object object) {
   ((ViewPager)container).removeView(views.get(position));
  }
  
  @Override
  public CharSequence getPageTitle(int position) {
   // 返回每个划动页面的标示   这里 用页面上一个控件来标注


   View v = views.get(position);
   TextView t = (TextView) v.findViewById(R.id.xct_lthj_quot_exch_exch_tv_asset);
   return t.getText().toString();
  }
  
  @Override
  public Object instantiateItem(View container, int position) {
   ((ViewPager)container).addView(views.get(position));
   return views.get(position);
  }
  
 }

 

viewpager  = findviewbyid(R.id.xxxxxxxxxx);

//设置划动数据适配器
  viewpager.setAdapter(new MyPagerAdapter(viewPagerSubViews));

 

仅依靠以上代码 即可实现页面的划动,如果有需求实现循环划动则需要对viewpager设置OnPageChangeListener监听器,并根据一套算法

来控制 viewpager的显示页。

 

2. 循环划动

           首先要确定viewpager数据集合中的元素是否 是变化的。这里说的是 数据固定的情况。

         当确定数据集合后 ,就可以通过设置OnPageChangeListener 监听器来 控制当前显示的 页面或者下个显示的页面,

 

 

这里首先举例 说明 有3个页面要显示的情况:

       例如:要显示3个划动页面 “人民币(索引是0)”  “港币(索引是1)” “美元(索引是2)” 。

//当划动的索引 是0时 ,修改当前索引到倒数第二个(length-2)
   //当划动的索引是最后一个时,修改当前索引到正数第二个 

由此总结出  规律:

 

 

private class MyOnPageChangeListener implements OnPageChangeListener {

 
  @Override
  public void onPageSelected(final int position) {
  /* switch (position) {
   case 0:
    
    Log.i("info", position+"美元");
    break;
   case 1:
    Log.i("info", position+"人民币");
    break;
   case 2:
    Log.i("info", position+"港币");
    break;
   case 3:
    Log.i("info", position+"美元");
    break;
   case 4:
    Log.i("info", position+"人民币");
    break;
   case 5:
    Log.i("info", position+"港币");
    break;

   
   }*/
   
   // 当前页为0时改为倒数第二个,也就是实际需要的最后一个view;当前页为最后一个时改为第二个,即实际上的第一个view
   
   // 按照数据集合来参照(从0开始):
   //当划动的索引 是0时 ,修改当前索引到倒数第二个(length-2)
   //当划动的索引是最后一个时,修改当前索引到正数第二个
   int showIndex = position;
    if (position == 0) {
     showIndex = viewPagerSubViews.size() /2/*- 3*/;
     viewpager.setCurrentItem(viewPagerSubViews.size() /2 /*- 3*/, false);
    } else {
     if (position == viewPagerSubViews.size() - 1) {
       showIndex = viewPagerSubViews.size() /2-1/*2*/;
       viewpager.setCurrentItem(showIndex, false);
      }
    }
   
   /* MyPagerAdapter p = (MyPagerAdapter) viewpager.getAdapter();
    String strTag = (String) p.getPageTitle(showIndex);
   */
    if(viewPagerSubViews.size()>1){
     rg.check((showIndex+(viewPagerSubViews.size()/2-1))%(viewPagerSubViews.size()/2));
    }
   
  }

  @Override
  public void onPageScrolled(int arg0, float arg1, int arg2) {
  }

  @Override
  public void onPageScrollStateChanged(int arg0) {
   
  }
 }

 

 // 由以上算法 可以认识到:数据集合需要是要显示的数据的2倍 ,例如如果有3个页面循环划动,那么数据集合 就得有6个。

 此外 数据集合中的元素排列也不一样,例如 有三个页面循环划动,并且以人民币,港币,美元的顺序划动,那么6个元素中  排列顺序如下:

  从第二个开始排列要首先显示的数据: 因此 0-5的索引中   1则为人民币, 并 以此顺序往后排,

 

1:人民币

2:港币

3:美元

4 :人民币

5:港币

到这里还剩下  一个美元 ,把美元排到0的位置 ,就成了

 

0:美元

1:人民币

2:港币

3:美元

4:人民币

5:港币

在根据以上算法  就可以循环划动  (左右划动)

 

 

 

3:导航点

如果要有导航点  ,则只需要在布局文件里加入 一组存放 导航图片的控件即可。这里选用 RadioGroup

RadioGroup rg = findviewbyid(R.id....);

 

只需要一个简单的 算法 并 对RadioGroup的子元素(RadioButton)设置层列表图形资源 即可实现导航点.

当划动 页面时 ,在 监听器的onPageSelected中 控制 radiobutton的选中项

 if(viewPagerSubViews.size()>1){
     rg.check((showIndex+(viewPagerSubViews.size()/2-1))%(viewPagerSubViews.size()/2));
    }

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值