读书人

(转)ViewPager运用

发布时间: 2013-03-06 16:20:31 作者: rapoo

(转)ViewPager使用

package com.example.testviewpagerandtabhost;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.os.Parcelable;import android.app.Activity;import android.app.LocalActivityManager;import android.content.Context;import android.content.Intent;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.DisplayMetrics;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.ImageView;import android.widget.TabHost;import android.widget.TextView;public class MainActivity extends Activity {Context context = null;LocalActivityManager manager = null;ViewPager pager = null;TextView t1,t2,t3;private int offset = 0;// 动画图片偏移量private int currIndex = 0;// 当前页卡编号private int bmpW;// 动画图片宽度private ImageView cursor;// 动画图片@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = MainActivity.this;manager = new LocalActivityManager(this , true);manager.dispatchCreate(savedInstanceState);InitImageView();initTextView();initPagerViewer();}/** * 初始化标题 */private void initTextView() {t1 = (TextView) findViewById(R.id.text1);t2 = (TextView) findViewById(R.id.text2);t3 = (TextView) findViewById(R.id.text3);t1.setOnClickListener(new MyOnClickListener(0));t2.setOnClickListener(new MyOnClickListener(1));t3.setOnClickListener(new MyOnClickListener(2));}/** * 初始化PageViewer */private void initPagerViewer() {pager = (ViewPager) findViewById(R.id.viewpage);final ArrayList<View> list = new ArrayList<View>();Intent intent = new Intent(context, A.class);list.add(getView("A", intent));Intent intent2 = new Intent(context, B.class);list.add(getView("B", intent2));Intent intent3 = new Intent(context, C.class);list.add(getView("C", intent3));pager.setAdapter(new MyPagerAdapter(list));pager.setCurrentItem(0);pager.setOnPageChangeListener(new MyOnPageChangeListener());}/** * 初始化动画 */private void InitImageView() {cursor = (ImageView) findViewById(R.id.cursor);bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.roller).getWidth();// 获取图片宽度DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;// 获取分辨率宽度offset = (screenW / 3 - bmpW) / 2;// 计算偏移量Matrix matrix = new Matrix();matrix.postTranslate(offset, 0);cursor.setImageMatrix(matrix);// 设置动画初始位置}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}/** * 通过activity获取视图 * @param id * @param intent * @return */private View getView(String id, Intent intent) {return manager.startActivity(id, intent).getDecorView();}/** * Pager适配器 */public class MyPagerAdapter extends PagerAdapter{List<View> list =  new ArrayList<View>();public MyPagerAdapter(ArrayList<View> list) {this.list = list;}@Overridepublic void destroyItem(ViewGroup container, int position,Object object) {ViewPager pViewPager = ((ViewPager) container);pViewPager.removeView(list.get(position));}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object instantiateItem(View arg0, int arg1) {ViewPager pViewPager = ((ViewPager) arg0);pViewPager.addView(list.get(arg1));return list.get(arg1);}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {}@Overridepublic Parcelable saveState() {return null;}@Overridepublic void startUpdate(View arg0) {}}/** * 页卡切换监听 */public class MyOnPageChangeListener implements OnPageChangeListener {int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量int two = one * 2;// 页卡1 -> 页卡3 偏移量//计算动态图片的位置并设置@Overridepublic void onPageSelected(int arg0) {Animation animation = null;switch (arg0) {case 0:if (currIndex == 1) {animation = new TranslateAnimation(one, 0, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, 0, 0, 0);}break;case 1:if (currIndex == 0) {animation = new TranslateAnimation(offset, one, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, one, 0, 0);}break;case 2:if (currIndex == 0) {animation = new TranslateAnimation(offset, two, 0, 0);} else if (currIndex == 1) {animation = new TranslateAnimation(one, two, 0, 0);}break;}currIndex = arg0;animation.setFillAfter(true);// True:图片停在动画结束位置animation.setDuration(300);cursor.startAnimation(animation);}@Overridepublic void onPageScrollStateChanged(int arg0) { //状态有三个0空闲,1是增在滑行中,2目标加载完毕//public static final int SCROLL_STATE_IDLE = 0;//public static final int SCROLL_STATE_DRAGGING = 1;//public static final int SCROLL_STATE_SETTLING = 2;}//从页面1滚动到2的过程@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}}/** * 头标点击监听 */public class MyOnClickListener implements View.OnClickListener {private int index = 0;public MyOnClickListener(int i) {index = i;}@Overridepublic void onClick(View v) {pager.setCurrentItem(index);}};}

?

读书人网 >移动开发

热点推荐