| package com.doumee.lib_coremodel.binding.viewadapter.view; | 
|   | 
|   | 
| import android.view.View; | 
|   | 
| import androidx.databinding.BindingAdapter; | 
|   | 
| import com.doumee.lib_coremodel.binding.command.BindingCommand; | 
| import com.jakewharton.rxbinding2.view.RxView; | 
|   | 
| import java.util.concurrent.TimeUnit; | 
|   | 
| import io.reactivex.functions.Consumer; | 
|   | 
| /** | 
|  * Created by goldze on 2017/6/16. | 
|  */ | 
|   | 
| public class ViewAdapter { | 
|     //防重复点击间隔(秒) | 
|     public static final int CLICK_INTERVAL = 1; | 
|   | 
|     /** | 
|      * requireAll 是意思是是否需要绑定全部参数, false为否 | 
|      * View的onClick事件绑定 | 
|      * onClickCommand 绑定的命令, | 
|      * isThrottleFirst 是否开启防止过快点击 | 
|      */ | 
|     @BindingAdapter(value = {"onClickCommand", "isThrottleFirst","commandType"}, requireAll = false) | 
|     public static void onClickCommand(View view, final BindingCommand clickCommand, final boolean isThrottleFirst,int commandType) { | 
|         if (isThrottleFirst) { | 
|             RxView.clicks(view) | 
|                     .subscribe(new Consumer<Object>() { | 
|                         @Override | 
|                         public void accept(Object object) throws Exception { | 
|                             if (clickCommand != null) { | 
|                                 if(commandType!=0){ | 
|                                     clickCommand.execute(commandType); | 
|                                 }else { | 
|                                     clickCommand.execute(); | 
|                                 } | 
|                             } | 
|                         } | 
|                     }); | 
|         } else { | 
|             RxView.clicks(view) | 
|                     .throttleFirst(CLICK_INTERVAL, TimeUnit.SECONDS)//1秒钟内只允许点击1次 | 
|                     .subscribe(new Consumer<Object>() { | 
|                         @Override | 
|                         public void accept(Object object) throws Exception { | 
|                             if (clickCommand != null) { | 
|                                 if(commandType!=0){ | 
|                                     clickCommand.execute(commandType); | 
|                                 }else { | 
|                                     clickCommand.execute(); | 
|                                 } | 
|                             } | 
|                         } | 
|                     }); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * view的onLongClick事件绑定 | 
|      */ | 
|     @BindingAdapter(value = {"onLongClickCommand"}, requireAll = false) | 
|     public static void onLongClickCommand(View view, final BindingCommand clickCommand) { | 
|         RxView.longClicks(view) | 
|                 .subscribe(new Consumer<Object>() { | 
|                     @Override | 
|                     public void accept(Object object) throws Exception { | 
|                         if (clickCommand != null) { | 
|                             clickCommand.execute(); | 
|                         } | 
|                     } | 
|                 }); | 
|     } | 
|   | 
|     /** | 
|      * 回调控件本身 | 
|      * | 
|      * @param currentView | 
|      * @param bindingCommand | 
|      */ | 
|     @BindingAdapter(value = {"currentView"}, requireAll = false) | 
|     public static void replyCurrentView(View currentView, BindingCommand bindingCommand) { | 
|         if (bindingCommand != null) { | 
|             bindingCommand.execute(currentView); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * view是否需要获取焦点 | 
|      */ | 
|     @BindingAdapter({"requestFocus"}) | 
|     public static void requestFocusCommand(View view, final Boolean needRequestFocus) { | 
|         if (needRequestFocus) { | 
|             view.setFocusableInTouchMode(true); | 
|             view.requestFocus(); | 
|         } else { | 
|             view.clearFocus(); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * view的焦点发生变化的事件绑定 | 
|      */ | 
|     @BindingAdapter({"onFocusChangeCommand"}) | 
|     public static void onFocusChangeCommand(View view, final BindingCommand<Boolean> onFocusChangeCommand) { | 
|         view.setOnFocusChangeListener(new View.OnFocusChangeListener() { | 
|             @Override | 
|             public void onFocusChange(View v, boolean hasFocus) { | 
|                 if (onFocusChangeCommand != null) { | 
|                     onFocusChangeCommand.execute(hasFocus); | 
|                 } | 
|             } | 
|         }); | 
|     } | 
|   | 
|     /** | 
|      * view的显示隐藏 | 
|      */ | 
|     @BindingAdapter(value = {"isVisible"}, requireAll = false) | 
|     public static void isVisible(View view, final Boolean visibility) { | 
|         if (visibility) { | 
|             view.setVisibility(View.VISIBLE); | 
|         } else { | 
|             view.setVisibility(View.GONE); | 
|         } | 
|     } | 
| //    @BindingAdapter({"onTouchCommand"}) | 
| //    public static void onTouchCommand(View view, final ResponseCommand<MotionEvent, Boolean> onTouchCommand) { | 
| //        view.setOnTouchListener(new View.OnTouchListener() { | 
| //            @Override | 
| //            public boolean onTouch(View v, MotionEvent event) { | 
| //                if (onTouchCommand != null) { | 
| //                    return onTouchCommand.execute(event); | 
| //                } | 
| //                return false; | 
| //            } | 
| //        }); | 
| //    } | 
| } |