Android 仿QQ首页的消息和电话的切换(Viewpager+frgment)

**首先我使用的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;

**

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值