仿知乎日报第五篇:为内容区MainFragment加载布局

一.前面我们也说了,其实内容区的布局很简单,只是一个ViewPager。但是呢,又和普通的ViewPager有点不一样,普通的ViewPager是左右滑动的。这里我们要实现的效果是让ViewPager保持不动,通过左侧的滑动菜单来切换ViewPager的不同页面

实现效果如下:

 

 

二.

1.具体的布局(main_fragment_base.xml)

<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <com.example.zhihudiary.view.NoInterceptViewPager
        android:id="@+id/vp_base_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
 
</LinearLayout>


里面只有一个ViewPager,但是是不动的ViewPager,这个我们需要自己去自定义

 

2)这里我们也新建一个包view,专门用来管理自定义的View


这个NoInterceptViewPager就是我们自定义的不会动的ViewPager  (NoInterceptViewPager)

public class NoInterceptViewPager extends MyViewPager {
 
    public NoInterceptViewPager(Context context) {
       super(context);
       // TODO自动生成的构造函数存根
    }
 
    public NoInterceptViewPager(Context context, AttributeSet attrs) {
       super(context, attrs);
       // TODO自动生成的构造函数存根
    }
   
    /*
     * 自己不拦截TouchEvent事件
     */
    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
       // TODO自动生成的方法存根
       return false;
    }
   
    /*
     * 自己不处理TouchEvent事件
     */
    @Override
    public boolean nTouchEvent(MotionEvent arg0) {
       // TODO自动生成的方法存根
       return false;
    }
 
}


3)但是你注意到没有,上面的NoInterceptViewPager没有继承ViewPager,而是继承MyViewPager? MyViewPager其实是低版本的ViewPager源码复制过来的,里面只改了一个成员变量的默认值,将其改为0。

    private static final int DEFAULT_OFFSCREEN_PAGES = 0;


为什么要这么做呢?因为现在的ViewPager版本都有预加载机制,默认预加载一个页面。比如有3个页面,当前显示了页面1,会预加载页面2。好处是你滑倒第2个页面会很快显示出来。不好的地方是比如3个页面你只用到第1个第3个页面,但是第二个页面即使用不到也会预加载,比较费流量。

这里我们不想它预加载,所以就使用了这个MyViewPager。注意:只能复制低版本的ViewPager来修改这个默认值,高版本不可以。找不到的依旧可以去我上传的项目中找到这个文件,复制即可。

 

 

2.在MainFragment中的initView方法中加载这个布局 (MainFragment.java)

public class MainFragment extends BaseFragment {
    private MyViewPager  mViewPager;
    @Override
    protected View initView() {
//     加载布局
       View root = View.inflate(mainActivity, R.layout.main_fragment_base, null);
//     拿到布局中的ViewPager组件
       mViewPager = (MyViewPager)root.findViewById(R.id.vp_base_fragment);
       return root;
    }
   
 
}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值