ViewPager基本使用

1.activity的Java代码

 1 package com.example.s_viewpager_1;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import android.app.Activity;
 7 import android.os.Bundle;
 8 import android.support.v4.view.PagerAdapter;
 9 import android.support.v4.view.ViewPager;
10 import android.support.v4.view.ViewPager.OnPageChangeListener;
11 import android.util.Log;
12 import android.view.LayoutInflater;
13 import android.view.View;
14 import android.view.View.OnClickListener;
15 import android.widget.Button;
16 import android.widget.TextView;
17 /**
18  * ViewPager基本使用:
19  * 步骤:
20  *     1.定义ViewPager控件
21  *  2.初始化该控件
22  *  3.自定义适配器,并创建一个适配器对象
23  *  4.为ViewPager设置监听器PagerAdapter
24  *  5.控制页面切换(如手动滑动,线程切换,改变底部小圆点等操作)
25  * */
26 public class MainActivity extends Activity {
27     Button btn;
28     ViewPager viewPager;     // 页面视图
29     View view;                // 页面
30     List<View> list;        // 用来装页面视图
31     LayoutInflater inflater;// 布局填充器
32     MyPagerAdapter adapter;    // 页面适配器
33     TextView tv;            // 页面上的TextView
34     int count = 1;            // 记录页面编号
35     public final static String TAG = "S_ViewPager_1";
36 
37     @Override
38     protected void onCreate(Bundle savedInstanceState) {
39         super.onCreate(savedInstanceState);
40         setContentView(R.layout.activity_main);
41 
42         // 初始化主界面控件及布局
43         viewPager = (ViewPager) findViewById(R.id.view_pager);
44         btn = (Button) findViewById(R.id.btn);
45         
46         // 该List用来装四个页面
47         list = new ArrayList<View>();
48 
49         inflater = getLayoutInflater();
50         
51         // 添加页面视图
52         addPage(inflater);
53 
54         // 为ViewPager对象设置适配器
55         adapter = new MyPagerAdapter(list);
56         viewPager.setAdapter(adapter);
57         // 最开始的页面
58         tv.setText(1+"");
59         
60         // 监听viewPager的滑动事件
61         ListenerOfViewPager();
62         
63         btn.setOnClickListener(new OnClickListener() {
64             
65             @Override
66             public void onClick(View v) {
67                 count++;
68                 // 添加页面视图
69                 addPage(inflater);
70                 // 通知适配器更新ViewPager
71                 adapter.notifyDataSetChanged();
72                 // 将页面编号设置在TextView
73                 tv.setText(count+"");
74             }
75         });
76     }
77 
78     // ViewPager的监听器
79     private void ListenerOfViewPager() {
80         //viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
81         viewPager.setOnPageChangeListener(new MySimpleOnPageChangeListener());
82     }
83 
84     // 添加页面视图
85     private void addPage(LayoutInflater inflater) {
86         // 通过布局文件取得四个View对象
87         view = inflater.inflate(R.layout.page_1, null);
88         tv = (TextView) view.findViewById(R.id.tv);
89         list.add(view);
90     }
91 }

2.OnPageChangeListener监听

 1 package com.example.s_viewpager_1;
 2 
 3 import android.support.v4.view.ViewPager.OnPageChangeListener;
 4 import android.util.Log;
 5 
 6 public class MyOnPageChangeListener implements OnPageChangeListener{
 7     private String TAG = "fanhy";
 8 
 9     // 滑动后被选中页面的位置,滑动一个页面只调用一次
10     /**
11      * 页面跳转完后得到调用:
12      * position是当前选中的页面的Position(位置编号)。
13      * */
14     @Override
15     public void onPageSelected(int arg0) {
16         Log.d(TAG , "onPageSelected-->arg0 = "+arg0);
17     }
18     
19     // 滑动一个页面,随着页面偏移量arg1和像素位置arg2的变化多次调用
20     /**
21      * 滑动的时候会调用: 
22      * arg0 :当前页面,即你点击滑动的页面
23      * arg1:当前页面偏移的百分比
24      * arg2:当前页面偏移的像素位置
25      * 
26      * */
27     @Override
28     public void onPageScrolled(int arg0, float arg1, int arg2) {
29         //Log.d(TAG, "onPageScrolled-->arg0 = "+arg0+",agr1 = "+arg1+",arg2 = "+arg2);
30     }
31     
32     // 页面状态变化,没滑动一个页面会调用三次,其值由 1--> 2 --> 0
33     /**
34      * 状态改变的时候调用:
35      * arg0这个参数有三种状态(0,1,2)。
36      * arg0==0的时辰默示什么都没做;
37      * arg0==1的时辰默示正在滑动; 
38      * arg0==2的时辰默示滑动完毕了。
39      **/
40     @Override
41     public void onPageScrollStateChanged(int arg0) {
42         Log.d(TAG, "onPageScrollStateChanged-->arg0 = "+arg0);
43     }
44 }

1 package com.example.s_viewpager_1;
2 
3 import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
4 
5 public class MySimpleOnPageChangeListener extends SimpleOnPageChangeListener{
6 }

 

3.PagerAdapter适配器 

 1 package com.example.s_viewpager_1;
 2 
 3 import java.util.List;
 4 
 5 import android.support.v4.view.PagerAdapter;
 6 import android.support.v4.view.ViewPager;
 7 import android.util.Log;
 8 import android.view.View;
 9 
10 // 适配器为ViewPager加载页面视图
11 class MyPagerAdapter extends PagerAdapter {
12     List<View> myList;
13     private String TAG = "fanhy";
14 
15     public MyPagerAdapter(List<View> l) {
16         myList = l;
17     }
18 
19     // 页面数量
20     @Override
21     public int getCount() {
22         return myList.size();
23     }
24 
25     @Override
26     public boolean isViewFromObject(View arg0, Object arg1) {
27         // Log.d(TAG, "isViewFromObject-->返回结果:"+(arg0 == arg1));
28         return arg0 == arg1;
29     }
30 
31     // 初始化position处的item选项,必须重写先初始化item才能使用,否则报错
32     // 有多个页面时,执行程序会首先初始化前两个item,向右滑动一次会接着初始化第三个item
33     // 再往右滑会初始化第四个item,并销毁第一个item。
34     @Override
35     public Object instantiateItem(View container, int position) {
36         // 从列表中取出View对象
37         View temp = myList.get(position);
38         // 将View对象添加到ViewPager中
39         ((ViewPager) container).addView(temp);
40         Log.d(TAG, "instantiateItem-->position = " + position);
41         return temp;
42     }
43 
44     @Override
45     public void destroyItem(View container, int position, Object object) {
46         // 从列表中取出View对象
47         View temp = myList.get(position);
48         // 将View对象从ViewPager中移除掉
49         ((ViewPager) container).removeView(temp);
50         Log.d(TAG, "destroyItem-->position = " + position);
51     }
52 }

4.

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     android:background="@android:color/holo_purple"
10     tools:context=".MainActivity" >
11     
12     <Button 
13         android:id="@+id/btn"
14         style="@style/myButton"
15         android:text="添加页面"
16         />
17     
18      <android.support.v4.view.ViewPager
19          android:id="@+id/view_pager"
20          android:layout_below="@id/btn"
21          android:layout_width="match_parent"
22          android:layout_height="match_parent">
23      </android.support.v4.view.ViewPager>
24 </RelativeLayout>

5.

<?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:background="@android:color/darker_gray"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/tv"
        style="@style/myTextView"
        android:text="1"
        />
</LinearLayout>

 

posted on 2015-09-30 09:46  敬的男人  阅读(88)  评论(0)    收藏  举报