| package com.doumee.lib_coremodel.binding.viewadapter.scrollview; | 
|   | 
|   | 
| import android.view.ViewTreeObserver; | 
| import android.widget.ScrollView; | 
|   | 
| import androidx.core.widget.NestedScrollView; | 
| import androidx.databinding.BindingAdapter; | 
|   | 
| import com.doumee.lib_coremodel.binding.command.BindingCommand; | 
|   | 
|   | 
| /** | 
|  * Created by goldze on 2017/6/18. | 
|  */ | 
| public final class ViewAdapter { | 
|   | 
|     @SuppressWarnings("unchecked") | 
|     @BindingAdapter({"onScrollChangeCommand"}) | 
|     public static void onScrollChangeCommand(final NestedScrollView nestedScrollView, final BindingCommand<NestScrollDataWrapper> onScrollChangeCommand) { | 
|         nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { | 
|             @Override | 
|             public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { | 
|                 if (onScrollChangeCommand != null) { | 
|                     onScrollChangeCommand.execute(new NestScrollDataWrapper(scrollX, scrollY, oldScrollX, oldScrollY)); | 
|                 } | 
|             } | 
|         }); | 
|     } | 
|   | 
|     @SuppressWarnings("unchecked") | 
|     @BindingAdapter({"onScrollChangeCommand"}) | 
|     public static void onScrollChangeCommand(final ScrollView scrollView, final BindingCommand<ScrollDataWrapper> onScrollChangeCommand) { | 
|         scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { | 
|             @Override | 
|             public void onScrollChanged() { | 
|                 if (onScrollChangeCommand != null) { | 
|                     onScrollChangeCommand.execute(new ScrollDataWrapper(scrollView.getScrollX(), scrollView.getScrollY())); | 
|                 } | 
|             } | 
|         }); | 
|     } | 
|   | 
|     public static class ScrollDataWrapper { | 
|         public float scrollX; | 
|         public float scrollY; | 
|   | 
|         public ScrollDataWrapper(float scrollX, float scrollY) { | 
|             this.scrollX = scrollX; | 
|             this.scrollY = scrollY; | 
|         } | 
|     } | 
|   | 
|     public static class NestScrollDataWrapper { | 
|         public int scrollX; | 
|         public int scrollY; | 
|         public int oldScrollX; | 
|         public int oldScrollY; | 
|   | 
|         public NestScrollDataWrapper(int scrollX, int scrollY, int oldScrollX, int oldScrollY) { | 
|             this.scrollX = scrollX; | 
|             this.scrollY = scrollY; | 
|             this.oldScrollX = oldScrollX; | 
|             this.oldScrollY = oldScrollY; | 
|         } | 
|     } | 
| } |