Android之ViewPager循环Demo

ViewPager是谷歌官方提供的兼容低版本安卓设备的软件包,里面包含了只有在安卓3.0以上可以使用的api。Viewpager现在也算是标配了,如果一个App没有用到ViewPager感觉还是比较罕见的,导航和页面菜单常用的功能,ViewPager与LisstView类似,ListView经常会用到BaseAdapter,ViewPager则继承的是PagerAdapter,关于简单的使用可以去官网可以http://developer.android.com/reference/android/support/v4/view/ViewPager.html当做参考了解一下,开始正题吧:

基础布局

看下效果图吧,网上好多都是放美女的,我还是简单点就放个TextView吧:

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.googleviewpager.MainActivity" >
 
 <android.support.v4.view.ViewPager  
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
 
</RelativeLayout>

 需要切换的三个布局文件,one.xml,two.xml,three.xml,one.xml的代码,其他两个类似就不贴代码了:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
     
    <TextView
        android:text="周永康被开"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
 
</LinearLayout>

Demo实现

onCreate中的代码,其实分别加载了三个View,其中第一个和最后一个加载了一个空的View,主要是为了能够左右循环:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
setContentView(R.layout.activity_main);
        LayoutInflater inflater=getLayoutInflater();
        viewPager=(ViewPager) findViewById(R.id.viewpager);
        view1=inflater.inflate(R.layout.one,null);
        view1.setBackgroundColor(Color.RED);
        view2=inflater.inflate(R.layout.two,null);
        view2.setBackgroundColor(Color.BLACK);
        view3=inflater.inflate(R.layout.three,null);
        view3.setBackgroundColor(Color.BLUE);
        viewList=new ArrayList<View>();
        viewList.add(new View(this));
        viewList.add(view1);
        viewList.add(view2);
        viewList.add(view3);
        viewList.add(new View(this));
        viewPager.setAdapter(new MyViewPagerAdapter(viewList));
        viewPager.setCurrentItem(1);

 自定义的MyViewPagerAdapter:

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
32
33
34
35
private class MyViewPagerAdapter extends PagerAdapter
    {
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            container.removeView(myList.get(position));
        }
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // TODO Auto-generated method stub
            container.addView(myList.get(position), 0);
              return myList.get(position);
        }
 
        private List<View> myList;
 
        public   MyViewPagerAdapter(List<View> list) {
            myList=list;
        }
 
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return myList.size();
        }
 
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
              return arg0==(arg1);
        }
 
         
         
    }

  上面写完之后还是需要设置一下页面setOnPageChangeListener的事件,循环的重点就是切换到一个空的View时将页面替换掉就可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
             
            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                 System.out.println("onPageSelected = " + arg0);
                 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
                 
            }
        });

  最后看一张切换中的效果吧:

Demo比较简单,不过对于入门应该是足够了~

 

posted @   Fly_Elephant  阅读(1447)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示