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);
            }
        });
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章