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>
浙公网安备 33010602011771号