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