ViewPager浅析

来源:互联网 发布:我知谁掌管明天刘若英 编辑:程序博客网 时间:2024/05/29 16:12

ViewPager是Android.support.v4.view包中定义的用于切换图片的UI控件,它是一个Adapter View,故需要设置Adapter,下面将以一个demo浅析ViewPager的用法。


XML布局

该布局仅包含一个ViewPager控件,唯一要注意的是要使用ViewPager的全限定类名。

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/view_pager"    android:layout_width="match_parent"    android:layout_height="match_parent" ></android.support.v4.view.ViewPager>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下面为ViewPager定义每个Item的布局(仅列出view1的布局,view2-view5与view1相似,故不再列出):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@drawable/android1"    android:orientation="vertical" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:text="View1"        android:textColor="@android:color/secondary_text_light"        android:textSize="20sp" /></LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

自定义Adapter

由于ViewPager是一个AdapterView,故需要定义Adapter,可以继承PagerAdapter:

public class MyPagerAdapter extends PagerAdapter {    private List<View> mList;    // ViewPager中的Item数量    @Override    public int getCount() {        // TODO Auto-generated method stub        return mList.size();    }    // constructor    public MyPagerAdapter(List<View> list) {        super();        mList = list;    }    @Override    public boolean isViewFromObject(View arg0, Object arg1) {        // TODO Auto-generated method stub        return arg0 == arg1;    }    // 删除position位置上的Item    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        // TODO Auto-generated method stub        container.removeView(mList.get(position));    }    // 选择position上的Item,将其添加至第一个位置上    @Override    public Object instantiateItem(ViewGroup container, int position) {        // TODO Auto-generated method stub        container.addView(mList.get(position), 0);        return mList.get(position);    }}
  • 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
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 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
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

activity逻辑实现

与其他AdapterView类似,ViewPager也需要按照如下步骤设置:

  1. 定义数据源;
  2. 定义Adapter(已继承PagerAdapter);
  3. 绑定数据源和Adapter;
  4. 为ViewPager设置Adapter。

public class MainActivity extends Activity {    private List<View> mList;    private ViewPager mViewPager;    private LayoutInflater mLayoutInflater;    private MyPagerAdapter mMyPagerAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mViewPager = (ViewPager) findViewById(R.id.view_pager);        // 定义数据源        mLayoutInflater = LayoutInflater.from(this);        View _view1 = mLayoutInflater.inflate(R.layout.view1, null);        View _view2 = mLayoutInflater.inflate(R.layout.view2, null);        View _view3 = mLayoutInflater.inflate(R.layout.view3, null);        View _view4 = mLayoutInflater.inflate(R.layout.view4, null);        View _view5 = mLayoutInflater.inflate(R.layout.view5, null);        mList = new ArrayList<View>();        mList.add(_view1);        mList.add(_view2);        mList.add(_view3);        mList.add(_view4);        mList.add(_view5);        // 绑定数据源和Adapter        mMyPagerAdapter = new MyPagerAdapter(mList);        // 为ViewPager设置Adapter        mViewPager.setAdapter(mMyPagerAdapter);        // 初始化第一个显示的Item        mViewPager.setCurrentItem(0);    }}
  • 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
  • 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

实现效果


这里写图片描述这里写图片描述这里写图片描述


可以看出,ViewPager实现图片切换,手指可以控制整个过程。

0 0
原创粉丝点击