三、 使用适配器+fragment实现tag效果

先上效果图 代码差不多都给了,细心看,希望能帮助你
在这里插入图片描述
在这里插入图片描述

绿图片移动算法 我的只是移动前四个
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) {

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值