ViewPager + Fragment 滑动

只贴出使用的Activity,嵌套的Fragment 只需创建即可。

package com.example.android_yemianhuadong;

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.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {

	private TextView tv1, tv2, tv3;//选项卡
	private ViewPager viewPager;//用来滑动Fragment
	private List<Fragment> list;//用来添加滑动的Fragment
	private int imgWidth;//图片的宽度
	private int offset;//
	private int currentIndex = 0;//当前Fragment索引
	private ImageView img;//显示滑动条

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		findView();
		addFragment();
		onClick();
		initImageView();
		viewPager.setOnPageChangeListener(new OnPageChangeListener() {

			int one = offset * 2 + imgWidth;//一个选项卡的宽度
			int two = one * 2;//两个选项卡的宽度

			@Override
			public void onPageSelected(int arg0) {
				Animation animation = null;
				switch (arg0) {
				case 0:
					if (currentIndex == 1) {
						animation = new TranslateAnimation(one, 0, 0, 0);
					} else if (currentIndex == 2) {
						animation = new TranslateAnimation(two, 0, 0, 0);
					}
					break;
				case 1:
					if (currentIndex == 0) {
						animation = new TranslateAnimation(0, one, 0, 0);
					} else if (currentIndex == 2) {
						animation = new TranslateAnimation(two, one, 0, 0);
					}
					break;
				case 2:
					if (currentIndex == 0) {
						animation = new TranslateAnimation(0,two, 0, 0);
					} else if (currentIndex == 1) {
						animation = new TranslateAnimation(one,two, 0, 0);
					}
					break;
				}
				currentIndex = arg0;
				animation.setFillAfter(true);
				animation.setDuration(300);
				img.startAnimation(animation);
			}

			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {

			}

			@Override
			public void onPageScrollStateChanged(int arg0) {

			}
		});
	}

	/**
	 * 初始化滑动条的初始位置
	 */
	private void initImageView() {
		img = (ImageView) findViewById(R.id.cursor);
		Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
				R.drawable.a);
		//滑动导航条的宽度
		imgWidth = bitmap.getWidth();
		DisplayMetrics displayMetrics = new DisplayMetrics();
		//获取屏幕的宽度
		getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
		int width = displayMetrics.widthPixels;
		//屏幕的宽度除以3减去底部条的宽度 再除2等于每个选项的起点到图片的距离
		offset = (width / 3 - imgWidth) / 2;
		//默认设置第一个页面的显示位置
		Matrix matrix = new Matrix();
		matrix.postTranslate(offset, 0);
		img.setImageMatrix(matrix);
	}

	/**
	 * 设置监听器及fragment
	 */
	private void onClick() {
		tv1.setOnClickListener(new MyOnClickListener(0));
		tv2.setOnClickListener(new MyOnClickListener(1));
		tv3.setOnClickListener(new MyOnClickListener(2));
		viewPager.setCurrentItem(0);
		viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
	}

	/**
	 * 添加Fragment
	 */
	private void addFragment() {
		list = new ArrayList<Fragment>();
		list.add(new Fragment1());
		list.add(new Fragment2());
		list.add(new Fragment3());
	}

	private void findView() {
		tv1 = (TextView) findViewById(R.id.text1);
		tv2 = (TextView) findViewById(R.id.text2);
		tv3 = (TextView) findViewById(R.id.text3);
		viewPager = (ViewPager) findViewById(R.id.vPager);
	}

	/**
	 * 点击选项卡
	 */
	public class MyOnClickListener implements OnClickListener {

		int index = 0;

		public MyOnClickListener(int i) {
			index = i;
		}

		@Override
		public void onClick(View v) {
			viewPager.setCurrentItem(index);

		}
	}

	/**
	 * 把Fragment适配到ViewPager上
	 */
	public class ViewPagerAdapter extends FragmentPagerAdapter {

		public ViewPagerAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int arg0) {
			return list.get(arg0);
		}

		@Override
		public int getCount() {
			return list.size();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值