只贴出使用的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();
}
}
}