仿Boss直聘消息界面事件分发效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cly19940419/article/details/82220281

在原公司待着没什么成长性,基本上每天都是坐等下班的状况,所以我决定辞职找一份具有挑战性的工作,由于8月份这个季节属于淡季,我拿到8份offer但是 由于这些公司做的产品 基本技术要求不高都是差不多的,所以我放弃了,接着找。然后闲来无事,看到boss直聘里面的一个ui效果,感觉还不错就撸了一个。

 现在我们回归话题  话不多说直接上代码  

 

 布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.admin.bossdemo.MainActivity"

    >
<RelativeLayout
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@android:color/holo_blue_bright"
    >
    <android.support.design.widget.TabLayout
        android:id="@+id/tb"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        app:tabBackground="@drawable/shap"
        app:tabIndicatorHeight="0dp"
        app:tabSelectedTextColor="@android:color/holo_blue_bright"
        app:tabTextColor="@android:color/white"

        >

    </android.support.design.widget.TabLayout>

</RelativeLayout>


<android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_below="@id/ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</android.support.v4.view.ViewPager>
</RelativeLayout>

核心代码   主要是对子viewpager进行分发处理

public class MyViewPager extends ViewPager {

    private int currentX;
    private int currentY;

    public MyViewPager(Context context) {
        super(context);
    }

    public MyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        getParent().requestDisallowInterceptTouchEvent(true);

        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                currentX = (int) ev.getX();
                currentY = (int) ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                int moveX = (int) ev.getX();
                int moveY = (int) ev.getX();
                //做是向上下移动还是左右移动操作处理
                int mx = moveX - currentX;
                int my = moveY - currentY;
                if(Math.abs(mx) >Math.abs(my)){  //如果大于表示是左右移动  否则的话是上下移动 
                    int currentItem = getCurrentItem();
                    if(mx>0) {
                        if (currentItem == 0) {   //如果是第一个让父view处理
                            getParent().requestDisallowInterceptTouchEvent(false);
                        }
                    }else{
                        int itemCount = getAdapter().getCount();
                        if(currentItem == itemCount-1){  //如果是最后一个让父view处理
                            getParent().requestDisallowInterceptTouchEvent(false);
                        }
                    }
                }else{
                    getParent().requestDisallowInterceptTouchEvent(false);//让父view处理
                }
                break;
            default:
                break;

        }
        return super.dispatchTouchEvent(ev);
    }


}

adapter 

public class TabAdapter extends FragmentPagerAdapter {

   List<BaseFramgnet> list ;
   List<String> titles;
    public TabAdapter(FragmentManager fm, List<BaseFramgnet>  t, List<String> title) {
        super(fm);
        list = t;
        titles = title;
    }

    @Override
    public BaseFramgnet getItem(int position) {
        return  list.get(position);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }


}

最后使用

   List<BaseFramgnet> list = new ArrayList<>();
        list.add(new FragmentOne());
        list.add(new FragmentW());
        List<String> strings = new ArrayList<>();
        strings.add("聊天");
        strings.add("互动");
        TabAdapter tabAdapter = new TabAdapter(getSupportFragmentManager(),list,strings);
         vp.setAdapter(tabAdapter);
         tb.setupWithViewPager(vp);

最后奉上demo地址

https://download.csdn.net/download/cly19940419/10635908

没有更多推荐了,返回首页