RxBinding2(三)Support-V4库和RecyclerView

RxBinding2 V4库和RecyclerView

依赖库:

//V4包含基础组件SlidingPaneLayout,SwipeRefreshLayout,ViewPager,DrawerLayout,NestedScrollView
implementation 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.2.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.2.0'
private void RxSupportV4(){
        RxViewPager.pageSelections(mViewPager);
        RxViewPager.pageScrollStateChanges(mViewPager);
        RxViewPager.pageScrollEvents(mViewPager);
        //刷新事件
        RxSwipeRefreshLayout.refreshes(mSwiperefreshlayout)
        //设置DrawerLayout是否打开
        RxDrawerLayout.open(mDrawerLayout).accept(true);
        //DrawerLayout打开和关闭事件
        RxDrawerLayout.drawerOpen(mDrawerLayout);
        //折叠
        RxNestedScrollView.scrollChangeEvents();
    }
    private void slidingpanelayout(){
        //SlidingPaneLayout(第一个FrameLayout代表菜单导航视图,第二个FrameLayout代表内容视图,
        // 两者都会在代码中动态添加Fragment)
        //Fragment的添加
        mFrgTransaction = mFrgManager.beginTransaction();
        mFrgTransaction.add(R.id.main_content, new FrameLayoutContent(), "Content");
        mFrgTransaction.add(R.id.main_menu, new FrameLayoutMenu(), "Menu");
        mFrgTransaction.commit();

        RxSlidingPaneLayout.open(mSlidingPaneLayout).accept(true);

        RxSlidingPaneLayout.panelOpens(SlidingPaneLayout)
                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean aBoolean) throws Exception {
                        if (aBoolean){
                            //SlidingPaneLayout状态为open
                        }else {
                            //SlidingPaneLayout状态为close
                        }
                    }
                });
        //滑动
        RxSlidingPaneLayout.panelSlides(SlidingPaneLayout)
                .subscribe(new Consumer<Float>() {
                    @Override
                    public void accept(Float aFloat) throws Exception {
                        //第一种滑动效果 aFloat:0~1
                        FrameLayoutMenu.setScaleY(aFloat / 2 + 0.5F);
                        FrameLayoutMenu.setScaleX(aFloat / 2 + 0.5F);
                        FrameLayoutContent.setScaleY(1 - aFloat / 5);
                        //第二种滑动效果把上面3行注释就OK,更多好看的滑动效果实现就要靠你自己摸索了。
                    }
                });

    }

RecyclerView:

private void RxRecyclerView(){
        //滚动事件
        RxRecyclerView.scrollEvents(mRecyclerView);
        //滚动状态改变
        RxRecyclerView.scrollStateChanges(mRecyclerView);
        //子View的添加和移除事件
        RxRecyclerView.childAttachStateChangeEvents(mRecyclerView);
        //手指离开屏幕的飞跃事件
        RxRecyclerView.flingEvents(mRecyclerView);

        //Adapter适配器的数据更新事件
        RxRecyclerViewAdapter.dataChanges(mAdapter);
    }
private void RxRecyclerView() {
        //滚动事件
        RxRecyclerView.scrollEvents(mRecyclerView)
                .subscribe(new Consumer<RecyclerViewScrollEvent>() {
                    @Override
                    public void accept(RecyclerViewScrollEvent recyclerViewScrollEvent) throws Exception {
                        recyclerViewScrollEvent.dx();   //X方向滚动了dx
                        recyclerViewScrollEvent.dy();   //Y方向滚动了dy
                        recyclerViewScrollEvent.view(); //RecyclerView
                    }
                });

        //滚动状态改变
        RxRecyclerView.scrollStateChanges(mRecyclerView)
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) throws Exception {

                    }
                });

        //子View的添加和移除事件
        RxRecyclerView.childAttachStateChangeEvents(mRecyclerView)
                .subscribe(new Consumer<RecyclerViewChildAttachStateChangeEvent>() {
                    @Override
                    public void accept(RecyclerViewChildAttachStateChangeEvent recyclerViewChildAttachStateChangeEvent) throws Exception {
                        //onNext
                        recyclerViewChildAttachStateChangeEvent.child();
                        recyclerViewChildAttachStateChangeEvent.view();
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        //onError
                    }
                }, new Action() {
                    @Override
                    public void run() throws Exception {
                        //onComplete
                    }
                }, new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {
                        //onSubscribe
                    }
                });

        //手指离开屏幕的飞跃事件
        RxRecyclerView.flingEvents(mRecyclerView)
        .subscribe(new Consumer<RecyclerViewFlingEvent>() {
            @Override
            public void accept(RecyclerViewFlingEvent recyclerViewFlingEvent) throws Exception {
                recyclerViewFlingEvent.velocityX(); //x方向速度
                recyclerViewFlingEvent.velocityY(); //y方向速度
                recyclerViewFlingEvent.view();
            }
        });

        //Adapter适配器的数据更新事件
        RxRecyclerViewAdapter.dataChanges(mAdapter)
        .subscribe(new Consumer<RecyclerView.Adapter<? extends RecyclerView.ViewHolder>>() {
            @Override
            public void accept(RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter) throws Exception {
                //监视数据更新
                adapter.notifyDataSetChanged();
                //监视制定位置数据更新
                adapter.notifyItemChanged(position);
                //监视数据的插入
                adapter.notifyItemInserted(position);
                //监视数据的移动
                adapter.notifyItemMoved(fromPosition,toPosition);
                //监视范围内数据的更新,插入,移除
                adapter.notifyItemRangeChanged(positionStart,itemCount);
                adapter.notifyItemRangeInserted(positionStart,itemCount);
                adapter.notifyItemRangeRemoved(positionStart,itemCount);
                //监视指定位置数据的移除
                adapter.notifyItemRemoved(position);
            }
        });
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章