Android循环ViewPager(二)

简介:

上午没事写了一篇,下午有事,晚上回来看看感觉写的差点意思,上篇文章大概的关于循环是自己添加了两个空的View,看到网上还有一种就是在自定义的Adapter中getCount中返回最大值,然后destroyItem不删除View,添加异常,说了这么多,我实验之后总是有问题,如果有弄成功的可以告知我一下,我的是三张图片~还是按照上午的那种方式就是第一个和最后一个是空View:

基础布局

看下效果吧,加了一排小圈圈,比上午的那个Demo好看:

 

activity_pager.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<FrameLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     android:layout_width= "fill_parent"
     android:layout_height= "fill_parent"
     android:orientation= "vertical"  >
     
    <android.support.v4.view.ViewPager 
         android:id= "@+id/viewPager_pic" 
         android:layout_width= "fill_parent" 
         android:layout_height= "wrap_content"  />
         
     <RelativeLayout 
         android:layout_width= "fill_parent" 
         android:layout_height= "wrap_content"
         android:orientation= "vertical" 
   
         <LinearLayout 
             android:id= "@+id/viewGroup_pic" 
             android:layout_width= "fill_parent" 
             android:layout_height= "wrap_content" 
             android:layout_alignParentBottom= "true"
             android:layout_marginBottom= "30dp" 
             android:gravity= "center_horizontal" 
             android:orientation= "horizontal" 
         </LinearLayout> 
     </RelativeLayout> 
 
</FrameLayout>

  实现Demo

自定义一个MyPicViewPagerAdapter:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
     private  class  MyPicViewPagerAdapter  extends  PagerAdapter {
 
     @Override
     public  int  getCount() {
         // TODO Auto-generated method stub
         return  viewList.size();
     }
 
     @Override
     public  boolean  isViewFromObject(View arg0, Object arg1) {
         // TODO Auto-generated method stub
         return  arg0 == arg1;
     }
 
     @Override
     public  void  destroyItem(ViewGroup container,  int  position, Object object) {
         // TODO Auto-generated method stub
         container.removeView(viewList.get(position));
     }
 
     @Override
     public  Object instantiateItem(ViewGroup container,  int  position) {
         // TODO Auto-generated method stub
         container.addView(viewList.get(position),  0 );
         return  viewList.get(position);
 
     }
 
}

 

 activity中的字段:

1
2
3
4
5
6
private  ViewPager viewPager;
private  int [] srcArr =  new  int [] { R.drawable.eagle, R.drawable.heron,
         R.drawable.flamingo };
private  ViewGroup viewGroup;
private  List<View> viewList;
private  ImageView[] cycleList;

 activity中的onCreate中实例化的ViewPager和ViewGroup,实例化的时候加入参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
viewPager = (ViewPager) findViewById(R.id.viewPager_pic);
viewGroup = (ViewGroup) findViewById(R.id.viewGroup_pic);
viewList =  new  ArrayList<View>();
viewList.add( new  View( this ));
for  ( int  i =  0 ; i < srcArr.length; i++) {
     ImageView imageView =  new  ImageView( this );
     imageView.setBackgroundResource(srcArr[i]);
     viewList.add(imageView);
}
viewList.add( new  View( this ));
// 加载小圆圈
cycleList =  new  ImageView[srcArr.length];
for  ( int  i =  0 ; i < cycleList.length; i++) {
     ImageView imageView =  new  ImageView( this );
     imageView.setLayoutParams( new  LayoutParams( 10 10 ));
     cycleList[i] = imageView;<br>               //0的时候选中
     if  (i == 0 ) {
         cycleList[i].setBackgroundResource(R.drawable.page_indicator_selected);
     else  {
         cycleList[i].setBackgroundResource(R.drawable.page_indicator_unselected);
     }
 
     LinearLayout.LayoutParams layoutParams =  new  LinearLayout.LayoutParams(
             new  ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
                     LayoutParams.WRAP_CONTENT));
     layoutParams.leftMargin =  5 ;
     layoutParams.rightMargin =  5 ;
     viewGroup.addView(imageView, layoutParams);
}
viewPager.setAdapter( new  MyPicViewPagerAdapter());
viewPager.setCurrentItem( 1 );

  Demo重要的是循环,由于是有五个View,三个小圈圈,所以就需要改变一下选中的setOnPageChangeListener:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
viewPager.setOnPageChangeListener( new  OnPageChangeListener() {
 
             @Override
             public  void  onPageSelected( int  arg0) {
                 // TODO Auto-generated method stub
                 for  ( int  i =  0 ; i < cycleList.length; i++) {
                     cycleList[i].setBackgroundResource(R.drawable.page_indicator_unselected);
                     if  (i == arg0- 1 ) {
                         cycleList[i].setBackgroundResource(R.drawable.page_indicator_selected);
                     }
                 }
                  if (arg0 ==  0 )
                  viewPager.setCurrentItem(viewList.size()- 2 );
                  else  if (arg0 == viewList.size() -  1 )
                  viewPager.setCurrentItem( 1 );
             }
 
             @Override
             public  void  onPageScrolled( int  arg0,  float  arg1,  int  arg2) {
                 // TODO Auto-generated method stub
 
             }
 
             @Override
             public  void  onPageScrollStateChanged( int  arg0) {
                 // TODO Auto-generated method stub
 
             }
         });

  最后看下效果图:

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4150091.html,如需转载请自行联系原作者

相关文章
|
5月前
|
XML Java Android开发
Android Studio App开发之翻页视图ViewPager的讲解及实战(附源码 包括翻页视图和翻页标签栏)
Android Studio App开发之翻页视图ViewPager的讲解及实战(附源码 包括翻页视图和翻页标签栏)
145 0
|
9月前
|
Android开发
Android 使用ViewPager实现手动左右切换页面和底部点点跟随切换效果
Android 使用ViewPager实现手动左右切换页面和底部点点跟随切换效果
143 0
|
9月前
|
Android开发
Android 使用ViewPager和自定义PagerAdapter实现轮播图效果
Android 使用ViewPager和自定义PagerAdapter实现轮播图效果
73 0
|
5月前
|
XML Java Android开发
Android Studio App开发之实现简单的启动引导页ViewPager(附源码 实现App的欢迎页面)
Android Studio App开发之实现简单的启动引导页ViewPager(附源码 实现App的欢迎页面)
104 1
|
7月前
|
Java Android开发
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
|
8月前
|
数据处理 Android开发
关于安卓viewpager实现堆叠卡片交互
关于安卓viewpager实现堆叠卡片交互
190 1
|
9月前
|
Android开发
Android 中ViewPager嵌套RecyclerView出现滑动冲突的解决方案
Android 中ViewPager嵌套RecyclerView出现滑动冲突的解决方案
716 0
|
9月前
|
XML Java Android开发
Android 中通过Java代码动态生成EditText视图,并循环遍历EditText取出遍历的ID和文本框的值
Android 中通过Java代码动态生成EditText视图,并循环遍历EditText取出遍历的ID和文本框的值
106 0
|
9月前
|
XML Android开发 数据格式
Android 使用ViewPager实现基本的翻页效果
Android 使用ViewPager实现基本的翻页效果
98 0
|
12月前
|
XML Android开发 数据格式
Android 底部导航栏(四、ViewPager+RadioGroup+Fragment)简单易懂
底部导航栏在Android应用中随处可见,今天使用ViewPager+RadioGroup+Fragment这三个控件来实现此功能。前面写了有三种实现方式,有兴趣可以去看看