一个运行成功的例子,加上自己的注释:
</pre><p>1、布局文件:</p><p></p><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#222222" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="页面一" android:background="#ffffff" /> <TextView android:id="@+id/textView2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="页面二" android:background="#ffffff" /> <TextView android:id="@+id/textView3" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="页面三" android:background="#ffffff" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/cursor" android:background="#222222" /> <android.support.v4.view.ViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#000000" android:flipInterval="30" android:persistentDrawingCache="animation" /> </LinearLayout>
2、类文件:
package com.example.viewpager; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.*; /* * ViewPager的使用 * 1、在布局文件中添加相应的控件 * 2、自定义适配器:需要重写四个方法 * 3、绑定数据源 * 4、设置监听事件 * 5、绘制游标(如果有必要的话) */ public class MainActivity extends Activity { private MyViewAdapter myViewAdapter; private TextView text1, text2, text3; private ImageView image; private List<View> mListViews; private ViewPager viewPager; private View view1, view2, view3; private int currentItem; private Animation animation; // 用来绘制游标的滑动 private int bmWidth; private int offSet; private ImageView imageView; private Bitmap cursor; private Matrix matrix = new Matrix(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { // findViewById:从onCreate(Bundle)加载的XML文件中通过id找到一个view text1 = (TextView) findViewById(R.id.textView1); text2 = (TextView) findViewById(R.id.textView2); text3 = (TextView) findViewById(R.id.textView3); viewPager = (ViewPager) findViewById(R.id.vPager); imageView = (ImageView) findViewById(R.id.cursor); initeCursor(); LayoutInflater layoutInflater = getLayoutInflater(); // inflate:增加一个新的视图层次从指定的xml文件中 view1 = layoutInflater.inflate(R.layout.layout1, null); view2 = layoutInflater.inflate(R.layout.layout2, null); view3 = layoutInflater.inflate(R.layout.layout3, null); mListViews = new ArrayList<View>(); mListViews.add(view1); mListViews.add(view2); mListViews.add(view3); // 绑定数据源 myViewAdapter = new MyViewAdapter(mListViews); // 绑定适配器 viewPager.setAdapter(myViewAdapter); // 绑定页面发生变化要执行的动作 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { /* * 当页面被选中时调用 * * @see * android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected * (int) */ @Override public void onPageSelected(int arg0) { switch (arg0) { case 0: if (currentItem == 1) { animation = new TranslateAnimation( offSet * 2 + bmWidth, 0, 0, 0); } else if (currentItem == 2) { animation = new TranslateAnimation(offSet * 4 + 2 * bmWidth, 0, 0, 0); } break; case 1: if (currentItem == 0) { animation = new TranslateAnimation(0, offSet * 2 + bmWidth, 0, 0); } else if (currentItem == 2) { animation = new TranslateAnimation(4 * offSet + 2 * bmWidth, offSet * 2 + bmWidth, 0, 0); } break; case 2: if (currentItem == 0) { animation = new TranslateAnimation(0, 4 * offSet + 2 * bmWidth, 0, 0); } else if (currentItem == 1) { animation = new TranslateAnimation( offSet * 2 + bmWidth, 4 * offSet + 2 * bmWidth, 0, 0); } } currentItem = arg0; animation.setDuration(500); animation.setFillAfter(true); imageView.startAnimation(animation); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); text1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { viewPager.setCurrentItem(0); } }); text2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { viewPager.setCurrentItem(1); } }); text3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { viewPager.setCurrentItem(2); } }); } private void initeCursor() { cursor = BitmapFactory .decodeResource(getResources(), R.drawable.cursor); bmWidth = cursor.getWidth(); DisplayMetrics dm; dm = getResources().getDisplayMetrics();// 获取屏幕宽度 offSet = (dm.widthPixels - 3 * bmWidth) / 6;// 设置游标间隙宽度 matrix.setTranslate(offSet, 0); imageView.setImageMatrix(matrix); // 需要iamgeView的scaleType为matrix currentItem = 0; } /* * 自定义ViewPager适配器 */ private class MyViewAdapter extends PagerAdapter { private List<View> mListViews; public MyViewAdapter(List<View> mListViews) { this.mListViews = mListViews; } @Override public int getCount() { return mListViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } //新的API中这两个方法被下面的两个方法取代 // @Override // public void destroyItem(View container, int position, Object object) { // ((ViewPager) container).removeView(mListViews.get(position)); // // } // // /* // * 初始化一个item // */ // @Override // public Object instantiateItem(View container, int position) { // // System.out.println("position--------------->:"+position); // // System.out.println("name------------->"+mListViews.get(position)); // ((ViewPager) container).addView(mListViews.get(position)); // // return mListViews.get(position); // } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView(mListViews.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { ((ViewPager) container).addView(mListViews.get(position)); return mListViews.get(position); } } }