如果不能看
关键性的
请看这个
直接上代码
package com.qiao.viewpageranimation;
import java.util.ArrayList;
import java.util.List;
import com.qiao.Fragment.FragmentOne;
import com.qiao.Fragment.FragmentThr;
import com.qiao.Fragment.FragmentTwo;
import android.graphics.BitmapFactory;
import android.graphics.Color;
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.util.Log;
import android.view.Menu;
import android.view.MenuItem;
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.LinearLayout;
import android.widget.TextView;
/**
* viewpager+fragment侧滑+导航条动画
* @author 有点凉了
* QQ群:123869487
* 求基友共同进步,求大神入群指点
* -----------------------------
* 被注释掉的方法是页面滑动后的移动效果
*/
public class MainActivity extends FragmentActivity {
private static final String TAG="MainActivity";
private ImageView cusor;
private int bmpW;// 动画图片宽度
private int offset = 0;// 动画图片偏移量
private List<Fragment> list = null;//
private TextView textView_one,textView_two,textView_thr;
private ViewPager mPager;
private int currIndex = 0;// 当前页卡编号
/**
* ViewPager的当前选中页
*/
private int currentIndex;
/**
* 屏幕的宽度
*/
private int screenWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findById();
init();
initTabLineWidth();
// 普通的动画移动
// InitImageView();
// InitTextView();
// InitViewPager();
}
/**
* 重置颜色
*/
private void resetTextView() {
textView_one.setTextColor(Color.BLACK);
textView_two.setTextColor(Color.BLACK);
textView_thr.setTextColor(Color.BLACK);
}
private void initTabLineWidth() {
DisplayMetrics dpMetrics = new DisplayMetrics();
getWindow().getWindowManager().getDefaultDisplay()
.getMetrics(dpMetrics);
screenWidth = dpMetrics.widthPixels;
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cusor
.getLayoutParams();
lp.width = screenWidth / 3;
// Log.i(TAG, "==lp.width:="+lp.width);
cusor.setLayoutParams(lp);
}
private void init() {
list = new ArrayList<Fragment>();
FragmentOne fragmentOne = new FragmentOne();
list.add(fragmentOne);
FragmentTwo fragmentTwo = new FragmentTwo();
list.add(fragmentTwo);
FragmentThr fragmentThr = new FragmentThr();
list.add(fragmentThr);
mPager.setAdapter(new MyAdapter(getSupportFragmentManager(),list));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
resetTextView();
switch (position) {
case 0:
textView_one.setTextColor(Color.BLUE);
break;
case 1:
textView_two.setTextColor(Color.BLUE);
break;
case 2:
textView_thr.setTextColor(Color.BLUE);
break;
default:
break;
}
currentIndex = position;
}
/**
* position :当前页面,及你点击滑动的页面 offset:当前页面偏移的百分比
* offsetPixels:当前页面偏移的像素位置
*/
@Override
public void onPageScrolled(int position, float offset, int offsetPixels) {
// TODO Auto-generated method stub
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cusor
.getLayoutParams();
// Log.i(TAG, "==offset:="+offset);
/**
* 利用currentIndex(当前所在页面)和position(下一个页面)以及offset来
* 设置mTabLineIv的左边距 滑动场景:
* 记3个页面,
* 从左到右分别为0,1,2
* 0->1; 1->2; 2->1; 1->0
*/
Log.i(TAG, "==-->currentIndex:="+currentIndex+" position:="+position );
if (currentIndex == 0 && position == 0)// 0->1
{
lp.leftMargin = (int) (offset * (screenWidth * 1.0 / 3) + currentIndex
* (screenWidth / 3));
Log.i(TAG, "==走了0——>1:="+lp.leftMargin);
} else if (currentIndex == 1 && position == 0) // 1->0
{
lp.leftMargin = (int) (-(1 - offset) * (screenWidth * 1.0 / 3) + currentIndex * (screenWidth / 3));
Log.i(TAG, "==走了 1->0:="+lp.leftMargin);
} else if (currentIndex == 1 && position == 1) // 1->2
{
lp.leftMargin = (int) (offset * (screenWidth * 1.0 / 3) + currentIndex
* (screenWidth / 3));
Log.i(TAG, "==走了1->2");
// Log.i(TAG, "==lp.leftMargin:= 1->2:="+lp.leftMargin);
} else if (currentIndex == 2 && position == 1) // 2->1
{
lp.leftMargin = (int) (-(1 - offset) * (screenWidth * 1.0 / 3) + currentIndex * (screenWidth / 3));
Log.i(TAG, "==走了2->1");
}
cusor.setLayoutParams(lp);
}
/**
* state滑动中的状态 有三种状态(0,1,2) 1:正在滑动 2:滑动完毕 0:什么都没做。
*/
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
});
}
private void findById() {
// TODO Auto-generated method stub
mPager = (ViewPager) findViewById(R.id.viewPager);
cusor = (ImageView) findViewById(R.id.cusor);
textView_one = (TextView) findViewById(R.id.textView_one);
textView_two = (TextView) findViewById(R.id.textView_two);
textView_thr = (TextView) findViewById(R.id.textView_thr);
}
/* private void InitViewPager() {
mPager = (ViewPager) findViewById(R.id.viewPager);
list = new ArrayList<Fragment>();
FragmentOne fragmentOne = new FragmentOne();
list.add(fragmentOne);
FragmentTwo fragmentTwo = new FragmentTwo();
list.add(fragmentTwo);
FragmentThr fragmentThr = new FragmentThr();
list.add(fragmentThr);
mPager.setAdapter(new MyAdapter(getSupportFragmentManager(),list));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
}*/
/* private void InitTextView() {
textView_one = (TextView) findViewById(R.id.textView_one);
textView_two = (TextView) findViewById(R.id.textView_two);
textView_thr = (TextView) findViewById(R.id.textView_thr);
textView_one.setOnClickListener(new MyOnClickListener(0));
textView_two.setOnClickListener(new MyOnClickListener(1));
textView_thr.setOnClickListener(new MyOnClickListener(2));
}*/
/* private void InitImageView() {
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.dotx11)
.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);
cusor.setImageMatrix(matrix);// 设置动画初始位置
}*/
/* *//**
* 头标点击监听
*//*
public class MyOnClickListener implements View.OnClickListener {
private int index = 0;
public MyOnClickListener(int i) {
index = i;
}
@Override
public void onClick(View v) {
mPager.setCurrentItem(index);
}
};*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/* *//**
* 页卡切换监听
*//*
public class MyOnPageChangeListener implements OnPageChangeListener {
int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
int two = one * 2;// 页卡1 -> 页卡3 偏移量
@Override
public 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);
cusor.startAnimation(animation);
}
*//**
* position :当前页面,及你点击滑动的页面 offset:当前页面偏移的百分比
* offsetPixels:当前页面偏移的像素位置
*//*
@Override
public void onPageScrolled(int position, float offset, int offsetPixels) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cusor
.getLayoutParams();
if (currentIndex == 0 && position == 0)// 0->1
{
lp.leftMargin = (int) (offset * (screenWidth * 1.0 / 3) + currentIndex
* (screenWidth / 3));
} else if (currentIndex == 1 && position == 0) // 1->0
{
lp.leftMargin = (int) (-(1 - offset)
* (screenWidth * 1.0 / 3) + currentIndex
* (screenWidth / 3));
} else if (currentIndex == 1 && position == 1) // 1->2
{
lp.leftMargin = (int) (offset * (screenWidth * 1.0 / 3) + currentIndex
* (screenWidth / 3));
} else if (currentIndex == 2 && position == 1) // 2->1
{
lp.leftMargin = (int) (-(1 - offset)
* (screenWidth * 1.0 / 3) + currentIndex
* (screenWidth / 3));
}
cusor.setLayoutParams(lp);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
}*/
class MyAdapter extends FragmentPagerAdapter {
private List<Fragment> list = null;
public MyAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
关键性的
砍掉侧边就行 单独的demo源码丢了,这也没差多少,,,注释几行代码就是标题所示了