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);
}
});
}