ScrollView嵌套Tablaout与ViewPager联动(标签)(ScrollView与ViewPager冲突)

来源:互联网 发布:淘宝违法判刑大全 编辑:程序博客网 时间:2024/06/11 22:26

                         

                效果如图:



                            

                布局文件:


<RelativeLayout    android:layout_width="match_parent"    android:layout_height="match_parent">    <android.support.design.widget.TabLayout        android:id="@+id/tab_layout"        android:layout_width="match_parent"        android:layout_height="@dimen/x100"        android:layout_below="@+id/rl_count"        android:background="@color/color_bg"        android:elevation="6dp"        android:minHeight="?attr/actionBarSize"        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"        app:tabSelectedTextColor="@color/text_color"        app:tabTextColor="@color/text_color" />    <android.support.v4.view.ViewPager        android:id="@+id/pager"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_below="@id/tab_layout" /></RelativeLayout>



          Java代码:


                              

private void initView() {    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);    tabLayout.addTab(tabLayout.newTab().setText("艾艾贴"));    tabLayout.addTab(tabLayout.newTab().setText("周边产品"));    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);    final OrderInfoAdapter adapter = new OrderInfoAdapter            (getSupportFragmentManager(), tabLayout.getTabCount());    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);    viewPager.setAdapter(adapter);    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {        @Override        public void onTabSelected(TabLayout.Tab tab) {            viewPager.setCurrentItem(tab.getPosition());        }        @Override        public void onTabUnselected(TabLayout.Tab tab) {        }        @Override        public void onTabReselected(TabLayout.Tab tab) {        }    });}

 


                         Adapter:

                           

/** * Created by xiaoMan on 2017/1/16. * Email:1635401972@qq.com * Details: */public class OrderInfoAdapter extends FragmentStatePagerAdapter {    int mNumOfTabs;    public OrderInfoAdapter(FragmentManager fm, int NumOfTabs) {        super(fm);        this.mNumOfTabs = NumOfTabs;    }    @Override    public Fragment getItem(int position) {        switch (position) {            case 0:                OrderInfoFragment tab1 = new OrderInfoFragment();                return tab1;            case 1:                PlaceOrderRimProductFragment tab2 = new PlaceOrderRimProductFragment();                return tab2;            default:                return null;        }    }    @Override    public int getCount() {        return mNumOfTabs;    }}



             这样就OK了。

             然后ScrollView与ViewPager冲突解决办法(自定义ViewPager):


/** * Created by xiaoMan on 2017/1/13. * Email:1635401972@qq.com * Details:此类用来解决ScrollView嵌套ViewPager冲突 */public class ChildViewPager extends ViewPager {    /**     * 触摸时按下的点     **/    PointF downP = new PointF();    /**     * 触摸时当前的点     **/    PointF curP = new PointF();    OnSingleTouchListener onSingleTouchListener;    public ChildViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub    }    public ChildViewPager(Context context) {        super(context);        // TODO Auto-generated constructor stub    }    @Override    public boolean onInterceptTouchEvent(MotionEvent arg0) {        // TODO Auto-generated method stub        //当拦截触摸事件到达此位置的时候,返回true        //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent        return true;    }    @Override    public boolean onTouchEvent(MotionEvent arg0) {        // TODO Auto-generated method stub        //每次进行onTouch事件都记录当前的按下的坐标        curP.x = arg0.getX();        curP.y = arg0.getY();        if (arg0.getAction() == MotionEvent.ACTION_DOWN) {            //记录按下时候的坐标            //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变            downP.x = arg0.getX();            downP.y = arg0.getY();            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰            getParent().requestDisallowInterceptTouchEvent(true);        }        if (arg0.getAction() == MotionEvent.ACTION_MOVE) {            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰            getParent().requestDisallowInterceptTouchEvent(true);        }        if (arg0.getAction() == MotionEvent.ACTION_UP) {            //up时判断是否按下和松手的坐标为一个点            //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick            if (downP.x == curP.x && downP.y == curP.y) {                onSingleTouch();                return true;            }        }        return super.onTouchEvent(arg0);    }    /**     * 单击     */    public void onSingleTouch() {        if (onSingleTouchListener != null) {            onSingleTouchListener.onSingleTouch();        }    }    /**     * 创建点击事件接口     *     * @author wanpg     */    public interface OnSingleTouchListener {        public void onSingleTouch();    }    public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {        this.onSingleTouchListener = onSingleTouchListener;    }}



                                     






                                              好了,没了 ==





                             

0 0
原创粉丝点击