先上效果图 代码差不多都给了,细心看,希望能帮助你
绿图片移动算法 我的只是移动前四个
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.s_long).getWidth();
//为了获取屏幕宽度,新建一个DisplayMetrics对象
DisplayMetrics displayMetrics = new DisplayMetrics();
//将当前窗口的一些信息放在DisplayMetrics类中
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//得到屏幕的宽度
int screenW = displayMetrics.widthPixels;
//计算出滚动条初始的偏移量
offset = (screenW /4 - bmpW) / 4-10;
//计算出切换一个界面时,滚动条的位移量
one = offset * 4 + bmpW;
Matrix matrix = new Matrix();
matrix.postTranslate(offset, 0);
//将滚动条的初始位置设置成与左边界间隔一个offset
sLink.setImageMatrix(matrix);
提供一个选择时点击效果
布局文件
创建一个FragmenAdapater(记得是选v4的Fragment的时候需要继承的Activity 需要有AppcomActivity,否则报错),写个BaseActivity继承,然后再继承
public class FragmentAdapter extends FragmentPagerAdapter {
//存放fragment的集合
private List mFragments;
public FragmentAdapter(FragmentManager fm,List<Fragment> mFragments) {
super(fm);
this.mFragments = mFragments;
}
其他布局文件
Activity内容
private ViewPager sViewPager;
// private ArrayList pageview;
private FragmentAdapter fragmentAdapter;
private List fragments = new ArrayList();
private CommunicateFragment communicateFragment;
private AnchorFragment anchorFragment;
private RankFragment rankFragment;
private VipFragment vipFragment;
// 滚动条初始偏移量
private int offset = 0;
// 当前页编号
private int currIndex = 0;
// 滚动条宽度
private int bmpW;
//一倍滚动量
private int one;
private void initView(){
sCommunicate.setSelected(true); //默认进入选择聊天部分
tvCurrent = sCommunicate;
sViewPager =findViewById(R.id.s_viewpager);
communicateFragment = new CommunicateFragment();
anchorFragment = new AnchorFragment();
rankFragment = new RankFragment();
vipFragment = new VipFragment();
fragments.add(communicateFragment);
fragments.add(anchorFragment);
fragments.add(rankFragment);
fragments.add(vipFragment);
fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(),fragments);
sViewPager.setAdapter(fragmentAdapter);
sViewPager.setCurrentItem(0);
sViewPager.addOnPageChangeListener(this);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.s_long).getWidth();
//为了获取屏幕宽度,新建一个DisplayMetrics对象
DisplayMetrics displayMetrics = new DisplayMetrics();
//将当前窗口的一些信息放在DisplayMetrics类中
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//得到屏幕的宽度
int screenW = displayMetrics.widthPixels;
//计算出滚动条初始的偏移量
offset = (screenW /4 - bmpW) / 4-10;
//计算出切换一个界面时,滚动条的位移量
one = offset * 4 + bmpW;
Matrix matrix = new Matrix();
matrix.postTranslate(offset, 0);
//将滚动条的初始位置设置成与左边界间隔一个offset
sLink.setImageMatrix(matrix);
}
//点击不同的按钮,切换不同视图
public void tabSelectClick(View view) {
changeTab(view);
}
private void changeTab(View view) {
tvCurrent.setSelected(false);
switch (view.getId()) {
case R.id.ll_communicate: {
sCommunicate.setSelected(true);
tvCurrent = sCommunicate;
sViewPager.setCurrentItem(0, false);
break;
}
case R.id.ll_anchor: {
sAnchor.setSelected(true);
tvCurrent = sAnchor;
sViewPager.setCurrentItem(1, false);
break;
}
case R.id.ll_rank: {
sRank.setSelected(true);
tvCurrent = sRank;
sViewPager.setCurrentItem(2, false);
break;
}
case R.id.ll_vip: {
sVip.setSelected(true);
tvCurrent = sVip;
sViewPager.setCurrentItem(3, false);
break;
}
default:
break;
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Animation animation = null;
switch (position) {
case 0:
changeTab(llCommunicate);
animation = new TranslateAnimation(one, 0, 0, 0);
break;
case 1:
changeTab(llAnchor);
animation = new TranslateAnimation(offset, one, 0, 0);
offset = one;
break;
case 2:
changeTab(llRnk);
animation = new TranslateAnimation(offset,2*one,0,0);
offset = 2*one;
break;
case 3:
changeTab(llVip);
animation = new TranslateAnimation(offset,3*one,0,0);
offset = 3*one;
break;
default:
break;
}
//arg0为切换到的页的编码
currIndex = position;
// 将此属性设置为true可以使得图片停在动画结束时的位置
animation.setFillAfter(true);
//动画持续时间,单位为毫秒
animation.setDuration(200);
//滚动条开始动画
sLink.startAnimation(animation);
}
@Override
public void onPageScrollStateChanged(int state) {
}