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