现在的位置: 首页 > 综合 > 正文

Android-ViewPager学习

2018年05月14日 ⁄ 综合 ⁄ 共 6170字 ⁄ 字号 评论关闭

一个运行成功的例子,加上自己的注释:

</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);
		}

	}

}

抱歉!评论已关闭.