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