package com.kelin.mvvmlight.bindingadapter.scrollview; import android.databinding.BindingAdapter; import android.support.v4.widget.NestedScrollView; import android.view.ViewTreeObserver; import android.widget.ScrollView; import com.kelin.mvvmlight.command.ReplyCommand; /** * Created by kelin on 16-3-24. */ public final class ViewBindingAdapter { @SuppressWarnings("unchecked") @BindingAdapter({"onScrollChangeCommand"}) public static void onScrollChangeCommand(final NestedScrollView nestedScrollView, final ReplyCommand<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 ReplyCommand<ScrollDataWrapper> onScrollChangeCommand) { scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { @Override public void onScrollChanged() { if (onScrollChangeCommand != null) { onScrollChangeCommand.execute(new ScrollDataWrapper(scrollView.getScaleX(), 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; } } }