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) { }``