android Viewpager+Fragment实现下划线随用户滑动而滑动

1:根据顶部切换的标签和屏幕的宽度动态设置底部导航图片的宽度


 //下划线的长度
 private int width;
//当前选中的标签页下标
private int index=0;
//Fragment的个数
private int num=0;
private LinearLayout.LayoutParams params;
     private void init() {
        //获得滑动标签图片的getLayoutParams();
        params= (LinearLayout.LayoutParams) image_pull.getLayoutParams();
        //获得屏幕的宽度
        DisplayMetrics dm=new DisplayMetrics();
       getWindowManager().getDefaultDisplay().g)width=dm.widthPixels;
        //添加Fragment集合
        List<Fragment> list=new ArrayList<Fragment>();
        //实例化Fragment管理器
        FragmentManager fm=getSupportFragmentManager();gmentManager();
        //创建适配器
        adapter=new ViewAdapter(fm,list);
        mViewPager.setAdapter(adapter);
        LinearLayout.LayoutParams lp= (LinearLayout.LayoutParams) image_pull.getLayoutParams();
        //根据顶部标签的数量和屏幕的宽度计算出下划线的宽度
        num=list.size();
        lp.width=width/num;
        //重新设置下导航图片的宽度
        image_pull.setLayoutParams(params);
     }

2:对Viewpager添加OnPageChangeListener方法并在其onPageScrolled方法中添加对导航图片的设置

private  class  myPageChangeListener implements ViewPager.OnPageChangeListener{

        /**
         * 当页面在滑动时调用的方法一直到滑动结束
         *
         * @param position
         *            :当前页面,及你点击滑动的页面
         * @param positionOffset
         *            :当前页面偏移的百分比
         * @param positionOffsetPixels
         *            :当前页面偏移的像素位置
         * */
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            //跳转到下个页面
            if(index==position){
                //计算下划线距离左部的Margin达到下划线随着手势滑动而滑动
                params.leftMargin=(int) (positionOffset * (width * 1.0 / num) + index
                        * (width / num));
            }
            //跳转到上一页面
            if(index==(position+1)){
                params.leftMargin = (int) (-(1 - positionOffset) * (width * 1.0 / num) + index
                        * (width / num));
            }
            //添加下划线距离左部间距
            image_pull.setLayoutParams(params);
        }

        /**
         * 当页面已经跳转完毕时调用的方法
         *
         * @param position
         *  代表当前页面的下标
         * */
        @Override
        public void onPageSelected(int position) {
            //更新下标
            index=position;
        }
        /**
         * 滑动状态
         *
        *            =2 滑动完成
         * */
        @Override
        public void onPageScrollStateChanged(int state) {
        }``



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值