package com.reactnativenavigation.views; import android.annotation.SuppressLint; import android.content.Context; import android.support.annotation.Nullable; import android.view.MotionEvent; import android.view.View; import com.reactnativenavigation.params.NavigationParams; import com.reactnativenavigation.views.collapsingToolbar.CollapseAmount; import com.reactnativenavigation.views.collapsingToolbar.CollapsingView; import com.reactnativenavigation.views.collapsingToolbar.CollapsingViewMeasurer; import com.reactnativenavigation.views.collapsingToolbar.OnScrollViewAddedListener; import com.reactnativenavigation.views.collapsingToolbar.ScrollListener; import com.reactnativenavigation.views.collapsingToolbar.ScrollViewDelegate; import com.reactnativenavigation.views.collapsingToolbar.ViewCollapser; import com.reactnativenavigation.views.utils.ScrollViewDetector; @SuppressLint("ViewConstructor") public class CollapsingContentView extends ContentView implements CollapsingView { private @Nullable ScrollViewDelegate scrollViewDelegate; private @Nullable ScrollViewDetector scrollViewDetector; private final ViewCollapser viewCollapser; public CollapsingContentView(Context context, String screenId, NavigationParams navigationParams) { super(context, screenId, navigationParams); viewCollapser = new ViewCollapser(this); } public void setupCollapseDetection(ScrollListener scrollListener, OnScrollViewAddedListener onScrollViewAddedListener) { scrollViewDelegate = new ScrollViewDelegate(scrollListener); scrollViewDetector = new ScrollViewDetector(this, onScrollViewAddedListener, scrollViewDelegate); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (scrollViewDelegate != null && scrollViewDelegate.hasScrollView()) { boolean consumed = scrollViewDelegate.didInterceptTouchEvent(ev); if (consumed) { return true; } } return super.dispatchTouchEvent(ev); } @Override public void onViewAdded(final View child) { super.onViewAdded(child); if (scrollViewDetector != null) { scrollViewDetector.findScrollView(child); } } @Override public void collapse(CollapseAmount amount) { viewCollapser.collapse(amount); } @Override public void fling(CollapseAmount amount) { viewCollapser.fling(amount); } public void destroy() { if (scrollViewDetector != null) { scrollViewDetector.destroy(); } if (scrollViewDelegate != null) { scrollViewDelegate.destroy(); } } @Override public float getFinalCollapseValue() { return ((CollapsingViewMeasurer) viewMeasurer).getFinalCollapseValue(); } @Override public float getCurrentCollapseValue() { return getTranslationY(); } @Override public View asView() { return this; } }