**首先我使用的viewpager+fragment还有viewpaget的指示器,三者结合着去做的
这里面viewpager指示器我用的第三方的框架 AdvancedPagerSlidingTabStrip
AdvancedPagerSlidingTabStrip是一种Android平台的导航控件,完美兼容Android自带库和兼容库的ViewPager组件,最低支持Android api v9。
支持一下功能:
支持Tab小圆点以及数量显示和隐藏
支持自定义Tab View
支持使用Bitmap、Drawable和本地resId来显示Tab图标
支持对Tab图标替换成自定义View来加载网络图片
支持自由设置小圆点、tab大小和位置等设置
支持实现如:微博等不均匀Tab的APP风格,并支持滑动
效果图这里就略了,这是项目地址自己去看 https://github.com/HomHomLin/AdvancedPagerSlidingTabStrip
**
/**
* 自定义的viewpager
* 自定义一个viewpager 主要目的是控制是否屏蔽viewpager的滑动事件
*/
public class APSTSViewPager extends ViewPager {
private boolean mNoFocus = false; //if true, keep View don't move
// 滑动距离及坐标
public APSTSViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public APSTSViewPager(Context context) {
this(context, null);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (mNoFocus){
return false;
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
public void setNoFocus(boolean b) {
mNoFocus = b;
}
}
<!--布局文件fragment_product.xml-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="47dp"
android:background="#0074e6">
<com.lhh.apst.library.CustomPagerSlidingTabStrip
android:id="@+id/tabs2"
style="@style/pagertab_style2"
android:layout_width="150dp"
android:layout_height="30dp"
android:fillViewport="false"
android:layout_marginBottom="7dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<com.jyc99.jyc.view.APSTSViewPager
android:id="@+id/vp_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tabs"
/>
</LinearLayout>
<--切换时选中背景的颜色以及样式tab样式custom_select_tab.xml-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvTab"
android:layout_width="73dp"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_marginBottom="1dp"
android:layout_marginTop="1dp"
android:background="@drawable/sub_background"
android:gravity="center"
android:paddingBottom="2dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="LINHOMHOM"
android:textColor="#ffffff"
android:textSize="14sp" />
</RelativeLayout>
<--sub_background.xml-->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#2388ec" />
<corners android:radius="4dip"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#0075e6" />
<corners android:radius="4dip"/>
</shape>
</item>
</selector>
<--切换时未选中背景的颜色以及样式custom_disselect_tab.xml -->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvTab"
android:layout_width="73dp"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp"
android:gravity="center"
android:paddingBottom="2dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="LINHOMHOM"
android:textColor="#0074e6"
android:textSize="13sp" />
</RelativeLayout>
public class ProductFragment extends Fragment implements ViewPager.OnPageChangeListener {
public CustomPagerSlidingTabStrip mAPSTS;
public APSTSViewPager mVP;
private static final int VIEW_FIRST = 0;
private static final int VIEW_SECOND = 1;
private static final int VIEW_SIZE = 2;
private Context mContext;
private GudingFragment mFirstFragment = null;
private ConvertibleFragment mConvertibleFragment = null;
private View view;
public static ProductFragment instance(Context mContext1) {
ProductFragment view = new ProductFragment();
return view;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_product, null);
findViews(view);
init();
return view;
}
private void findViews(View view) {
mAPSTS = (CustomPagerSlidingTabStrip) view.findViewById(R.id.tabs2);
mVP = (APSTSViewPager) view.findViewById(R.id.vp_main);
}
private void init() {
mVP.setOffscreenPageLimit(2);
FragmentAdapter adapter = new FragmentAdapter(getChildFragmentManager());
mVP.setAdapter(adapter);
//屏蔽掉滑动事件
mVP.setNoFocus(true);
adapter.notifyDataSetChanged();
mAPSTS.setViewPager(mVP);
mAPSTS.setOnPageChangeListener(this);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
public class FragmentAdapter extends FragmentStatePagerAdapter implements CustomPagerSlidingTabStrip.CustomTabProvider {
protected LayoutInflater mInflater;
public FragmentAdapter(FragmentManager fm) {
super(fm);
mInflater = LayoutInflater.from(getActivity());
}
@Override
public Fragment getItem(int position) {
if (position >= 0 && position < VIEW_SIZE) {
switch (position) {
case VIEW_FIRST:
if (null == mFirstFragment)
mFirstFragment = GudingFragment.instance();
return mFirstFragment;
case VIEW_SECOND:
if (null == mConvertibleFragment)
mConvertibleFragment = ConvertibleFragment.instance();
return mConvertibleFragment;
default:
break;
}
}
return null;
}
@Override
public int getCount() {
return VIEW_SIZE;
}
@Override
public CharSequence getPageTitle(int position) {
if (position >= 0 && position < VIEW_SIZE) {
switch (position) {
case VIEW_FIRST:
return "电话";
case VIEW_SECOND:
return "好友";
default:
break;
}
}
return null;
}
@Override
public View getSelectTabView(int position, View convertView) {
if (convertView == null) {
//字体样式
convertView = mInflater.inflate(R.layout.custom_select_tab, null);
}
TextView tv = ViewHolder.get(convertView, R.id.tvTab);
tv.setText(getPageTitle(position));
return convertView;
}
@Override
public View getDisSelectTabView(int position, View convertView) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_disselect_tab, null);
}
TextView tv = ViewHolder.get(convertView, R.id.tvTab);
tv.setText(getPageTitle(position));
return convertView;
}
}
}
**fragment类 只是举个例子,另外一个自己写
public class GudingFragment extends Fragment {
public static GudingFragment instance() {
GudingFragment view = new GudingFragment();
return view;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.guding_fragment, null);
return view;
**