react-native-navigation的迁移库

CollapsingSingleScreen.java 3.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package com.reactnativenavigation.screens;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.view.MotionEvent;
  4. import android.widget.ScrollView;
  5. import com.facebook.react.uimanager.RootViewUtil;
  6. import com.reactnativenavigation.params.ScreenParams;
  7. import com.reactnativenavigation.views.CollapsingContentView;
  8. import com.reactnativenavigation.views.LeftButtonOnClickListener;
  9. import com.reactnativenavigation.views.TopBar;
  10. import com.reactnativenavigation.views.collapsingToolbar.CollapseAmount;
  11. import com.reactnativenavigation.views.collapsingToolbar.CollapseCalculator;
  12. import com.reactnativenavigation.views.collapsingToolbar.CollapsingTopBar;
  13. import com.reactnativenavigation.views.collapsingToolbar.CollapsingView;
  14. import com.reactnativenavigation.views.collapsingToolbar.CollapsingViewMeasurer;
  15. import com.reactnativenavigation.views.collapsingToolbar.OnScrollListener;
  16. import com.reactnativenavigation.views.collapsingToolbar.OnScrollViewAddedListener;
  17. import com.reactnativenavigation.views.collapsingToolbar.ScrollListener;
  18. import com.reactnativenavigation.views.collapsingToolbar.behaviours.CollapseBehaviour;
  19. public class CollapsingSingleScreen extends SingleScreen {
  20. public CollapsingSingleScreen(AppCompatActivity activity, ScreenParams screenParams, LeftButtonOnClickListener titleBarBarBackButtonListener) {
  21. super(activity, screenParams, titleBarBarBackButtonListener);
  22. }
  23. @Override
  24. public void destroy() {
  25. super.destroy();
  26. ((CollapsingContentView) contentView).destroy();
  27. }
  28. @Override
  29. protected TopBar createTopBar() {
  30. final CollapsingTopBar topBar = new CollapsingTopBar(getContext(), styleParams);
  31. topBar.setScrollListener(getScrollListener(topBar));
  32. return topBar;
  33. }
  34. @Override
  35. protected void createContent() {
  36. contentView = new CollapsingContentView(getContext(), screenParams.screenId, screenParams.navigationParams);
  37. setViewMeasurer();
  38. setupCollapseDetection((CollapsingTopBar) topBar);
  39. addView(contentView, createLayoutParams());
  40. }
  41. private void setViewMeasurer() {
  42. if (screenParams.styleParams.drawScreenBelowTopBar || screenParams.styleParams.drawScreenAboveBottomTabs) {
  43. contentView.setViewMeasurer(new CollapsingViewMeasurer((CollapsingTopBar) topBar, this, screenParams.styleParams));
  44. }
  45. }
  46. private void setupCollapseDetection(final CollapsingTopBar topBar) {
  47. ((CollapsingContentView) contentView).setupCollapseDetection(getScrollListener(topBar), new OnScrollViewAddedListener() {
  48. @Override
  49. public void onScrollViewAdded(ScrollView scrollView) {
  50. topBar.onScrollViewAdded(scrollView);
  51. }
  52. });
  53. }
  54. private ScrollListener getScrollListener(final CollapsingTopBar topBar) {
  55. return new ScrollListener(new CollapseCalculator(topBar, getCollapseBehaviour()),
  56. new OnScrollListener() {
  57. @Override
  58. public void onScroll(MotionEvent event, CollapseAmount amount) {
  59. if (screenParams.styleParams.drawScreenBelowTopBar) {
  60. RootViewUtil.getRootView(contentView).onChildStartedNativeGesture(event);
  61. ((CollapsingView) contentView).collapse(amount);
  62. }
  63. topBar.collapse(amount);
  64. }
  65. @Override
  66. public void onFling(CollapseAmount amount) {
  67. if (screenParams.styleParams.drawScreenBelowTopBar) {
  68. ((CollapsingView) contentView).collapse(amount);
  69. }
  70. topBar.collapse(amount);
  71. }
  72. },
  73. getCollapseBehaviour()
  74. );
  75. }
  76. private CollapseBehaviour getCollapseBehaviour() {
  77. return screenParams.styleParams.collapsingTopBarParams.collapseBehaviour;
  78. }
  79. }