rxbinding

介绍Rxbinding 3.0引入依赖举例 单点 并不可重复点击RxView 操作显隐长按View被添加View被添加时触发View被移除View拖拽View重绘globalLayouts 监听布局改变focusChanges 监听焦点变化keys 按键被按下hovers 悬停事件layoutChanges和layoutChangeEvents 组件布局参数发生改变preDraws 将要绘制时滚动事件systemUiVisibilityChanges 状态栏和导航栏可见和隐藏touches 触摸事件

RxTextViewEditText 文本变化监听editorActions和editorActionEvents

RxViewGroupRxToolbarnavigationClicksitemClicks

RxMenuItemclicksactionViewEvents

RxRadioGroupcheckedChanges 监听选中变化checked 选择单选按钮RxCompoundButtonRxAutoCompleteTextViewRxPopupMenu

RxAdapter、RxAbsListView、RxAdapterViewRxSeekBarRxRatingBarRxSearchView

Rxbinding 4.0

参考地址

介绍

RxBinding 是 Jake Wharton 的一个开源库,它提供了一套在 Android 平台上的基于 RxJava的 Binding API。 RxBinding 是对 Android View 事件的扩展,它帮助我们可以对 View 事件使用 RxJava 的各种操作; RxBinding 提供了与 RxJava 一致的回调,简化了代码; 几乎支持所有的常用控件及事件; 支持 Kotlin;

Rxbinding 3.0

rxbinding 3 需要AndroidX

引入依赖

implementation ('com.jakewharton.rxbinding3:rxbinding:3.0.0') {

exclude module: 'rxjava'

exclude module: 'rxandroid'

}

rxbinding 默认会引入rxjava、rxandroid。如果项目内有自己的rx组件,需要刨包。

其他依赖,可以扩展:

implementation 'com.jakewharton.rxbinding3:rxbinding-core:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-drawerlayout:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-leanback:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-recyclerview:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-slidingpanelayout:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-swiperefreshlayout:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-viewpager:3.0.0-alpha2'

implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.0.0-alpha2'

举例 单点 并不可重复点击

rxViewGcUtil.add(

RxView.clicks(binding.btnRescue)

.throttleFirst(1, TimeUnit.SECONDS)

.subscribe(unit -> WebActivity.newRescue(getContext()))

);

因为是Rx结构,Disposable肯定处理,下面是小小的封装,集中管理Disposable

public class RxViewGcUtil {

private CompositeDisposable compositeDisposable;

public RxViewGcUtil() {

compositeDisposable = new CompositeDisposable();

}

public void add(Disposable disposable) {

if (disposable != null)

compositeDisposable.add(disposable);

}

private void delete(Disposable disposable) {

if (compositeDisposable != null) {

compositeDisposable.delete(disposable);

}

}

public void clear() {

if (compositeDisposable != null) {

compositeDisposable.clear();

compositeDisposable = null;

}

}

}

RxView 操作

转载自:https://www.jianshu.com/p/1ad3633ef0b4

显隐

RxView.visibility(binding.input).accept(true); == bt_1.setVisibility(value ? View.VISIBLE : View.GONE);

长按

RxView.longClicks(bt_1) == bt_1.setOnLongClickListener(new View.OnLongClickListener() {

View被添加

RxView.attaches(bt_1);

View被添加时触发

RxView.attachEvents(bt_1)

View被移除

RxView.detaches(bt_1);

View拖拽

RxView.drags(ll_demo)

.subscribe(new Consumer() {

@Override

public void accept(DragEvent event) throws Exception {

//获取事件

int action = event.getAction();

switch (action) {

case DragEvent.ACTION_DRAG_STARTED:

Log.d("aaa", "开始拖拽");

break;

case DragEvent.ACTION_DRAG_ENDED:

Log.d("aaa", "结束拖拽");

break;

case DragEvent.ACTION_DRAG_ENTERED:

Log.d("aaa", "拖拽的view进入监听的view时");

break;

case DragEvent.ACTION_DRAG_EXITED:

Log.d("aaa", "拖拽的view离开监听的view时");

ll_demo.setBackgroundColor(Color.parseColor("#303F9F"));

break;

case DragEvent.ACTION_DRAG_LOCATION:

float x = event.getX();

float y = event.getY();

ll_demo.setBackgroundColor(Color.GRAY);

Log.i("aaa", "拖拽的view在监听view中的位置:x =" + x + ",y=" + y);

break;

case DragEvent.ACTION_DROP:

Log.i("aaa", "释放拖拽的view");

if(event != null && event.getLocalState() != null){

View localState = (View) event.getLocalState();

FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

((ViewGroup) localState.getParent()).removeView(localState);

ll_demo.addView(localState, layoutParams);

}

break;

}

}

});

View重绘

RxView.draws(view_demo) == view_demo.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawLis

globalLayouts 监听布局改变

RxView.globalLayouts(rootview) == rootview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTre

focusChanges 监听焦点变化

RxView.focusChanges(et_demo) == et_demo.setOnFocusChangeListener(new View.OnFocusChange

keys 按键被按下

RxView.keys(et_demo) == et_demo.setOnKeyListener(new View.OnKeyListener() {

hovers 悬停事件

layoutChanges和layoutChangeEvents 组件布局参数发生改变

RxView.layoutChanges(rootview)

RxView.layoutChangeEvents(rootview)

== rootview.addOnLayoutChangeListener(new View.OnLayoutChangeListener()

preDraws 将要绘制时

RxView.preDraws(view_demo, new Func

== view_demo.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreD

滚动事件

RxView.scrollChangeEvents(view_demo)

== view_demo.setOnScrollChangeListener(new View.OnScrollChangeLis

systemUiVisibilityChanges 状态栏和导航栏可见和隐藏

RxView.systemUiVisibilityChanges(rootview)

== rootview.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChange

touches 触摸事件

RxView.touches(et_demo) == et_demo.setOnTouchListener(new View.OnTouchLis

例:

RxView.touches(binding.btnLock, new Function1() {

@Override

public Boolean invoke(MotionEvent motionEvent) {

if (binding.btnEngine.isSelectedState()) {

return true;

} else {

return false;

}

}

})

.throttleFirst(1, TimeUnit.SECONDS)

.subscribe(unit -> {

AppLogUtils.i(TAG, "当 上面return true,走这里" );

});

如果不需要拦截事件,就需要把事件传递下去,touches方法默认拦截

binding.btnDefault.onTouchEvent(motionEvent);

RxTextView

EditText 文本变化监听

RxTextView.beforeTextChangeEvents(et_demo)

RxTextView.textChangeEvents(et_demo)

RxTextView.afterTextChangeEvents(et_demo)

== et_demo.addTextChangedListener(new TextWatcher() {

rxViewGcUtil.add(RxTextView.textChanges(binding.input).subscribe(new Consumer() {

@Override

public void accept(CharSequence charSequence) throws Exception {

}

}));

editorActions和editorActionEvents

RxTextView.editorActions(et_demo)

RxTextView.editorActionEvents(et_demo)

== et_demo.setOnEditorActionListener(new TextView.OnEditorActionList

RxViewGroup

当viewgroup添加或者删除子view时触发

rootview.addView(view);

rootview.removeView(view);

RxViewGroup.changeEvents(rootview)

== rootview.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeL

RxToolbar

navigationClicks

RxToolbar.navigationClicks(toolbar_normal

== toolbar_normal.setNavigationOnClickListener(new View.OnCl

itemClicks

RxToolbar.itemClicks(toolbar_normal).

==toolbar_normal.setOnMenuItemClickListener(new Toolbar.OnMen

RxMenuItem

clicks

RxMenuItem.clicks(menuItem)

actionViewEvents

RxMenuItem.actionViewEvents(menuItem)

RxRadioGroup

checkedChanges 监听选中变化

RxRadioGroup.checkedChanges(radio_g).

==radio_g.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListene

checked 选择单选按钮

RxRadioGroup.checked(radio_g).accept(radioButton2.getId());

== radio_g.check(radioButton2.getId());

RxCompoundButton

RxCompoundButton.checkedChanges(radioButton1)

== radioButton1.setOnCheckedChangeListener(new CompoundButton.OnCheckedCha

RxAutoCompleteTextView

RxAutoCompleteTextView.itemClickEvents(auto_tv)

RxPopupMenu

RxPopupMenu.itemClicks(popupMenu)

== popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClick

RxPopupMenu.dismisses(popupMenu).subs

==popupMenu.setOnDismissListener(new PopupMenu.OnDismissLis

RxAdapter、RxAbsListView、RxAdapterView

//适配器Adapter数据改变

RxAdapter.dataChanges();

//绝对视图滚动事件

RxAbsListView.scrollEvents();

RxAdapterView.selectionEvents();

RxAdapterView.itemSelections();

RxAdapterView.itemClicks();

RxAdapterView.itemLongClicks();

RxAdapterView.itemLongClickEvents();

RxSeekBar

RxSeekBar.userChanges(seekBar)

RxSeekBar.systemChanges(seekBar)

RxSeekBar.changeEvents(seekBar)

RxSeekBar.changes(seekBar).

RxRatingBar

//星级滚动条进度改变事件

RxRatingBar.ratingChanges();

//星级滚动条进度改变事件

RxRatingBar.ratingChangeEvents();

RxSearchView

queryTextChanges 输入文本监听,文本变化后的文本

RxSearchView.queryTextChanges(search_view)

queryTextChangeEvents

RxSearchView.queryTextChangeEvents(search_view).subscribe(new Consumer() {

@Override

public void accept(SearchViewQueryTextEvent searchViewQueryTextEvent) throws Exception {

if(searchViewQueryTextEvent.isSubmitted()){

//提交后的处理

}else{

//输入文本监听

}

}

});

query

try {

//设置SearchView的初始值

RxSearchView.query(search_view, true).accept("asd");

} catch (Exception e) {

e.printStackTrace();

}

Rxbinding 4.0

更新于:20210528

RxBinding RxJava binding APIs for Android UI widgets from the platform and support libraries.

Download Platform bindings:

implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'

AndroidX library bindings:

implementation 'com.jakewharton.rxbinding4:rxbinding-core:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-appcompat:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-drawerlayout:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-leanback:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-recyclerview:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-slidingpanelayout:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-swiperefreshlayout:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-viewpager:4.0.0'

implementation 'com.jakewharton.rxbinding4:rxbinding-viewpager2:4.0.0'

Google ‘material’ library bindings:

implementation 'com.jakewharton.rxbinding4:rxbinding-material:4.0.0'

参考地址

JakeWharton RxBinding:https://github.com/JakeWharton/RxBinding

ChinaCode:https://gitcode.net/mirrors/JakeWharton/rxbinding?utm_source=csdn_github_accelerator

Rx系列<第二十四篇>:RxJava之RxBinding3.0:https://www.jianshu.com/p/1ad3633ef0b4

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: