版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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);
}
});
}