react-native-navigation的迁移库

CollapsingSingleScreen.java 4.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. post(new Runnable() {
  40. @Override
  41. public void run() {
  42. addView(contentView, createLayoutParams());
  43. }
  44. });
  45. }
  46. private void setViewMeasurer() {
  47. if (screenParams.styleParams.drawScreenBelowTopBar || screenParams.styleParams.drawScreenAboveBottomTabs) {
  48. contentView.setViewMeasurer(new CollapsingViewMeasurer((CollapsingTopBar) topBar, this, screenParams.styleParams));
  49. }
  50. }
  51. private void setupCollapseDetection(final CollapsingTopBar topBar) {
  52. ((CollapsingContentView) contentView).setupCollapseDetection(getScrollListener(topBar), new OnScrollViewAddedListener() {
  53. @Override
  54. public void onScrollViewAdded(ScrollView scrollView) {
  55. topBar.onScrollViewAdded(scrollView);
  56. }
  57. });
  58. }
  59. private ScrollListener getScrollListener(final CollapsingTopBar topBar) {
  60. return new ScrollListener(new CollapseCalculator(topBar, getCollapseBehaviour()),
  61. new OnScrollListener() {
  62. @Override
  63. public void onScroll(MotionEvent event, CollapseAmount amount) {
  64. if (screenParams.styleParams.drawScreenBelowTopBar) {
  65. RootViewUtil.getRootView(contentView).onChildStartedNativeGesture(event);
  66. ((CollapsingView) contentView).collapse(amount);
  67. }
  68. topBar.collapse(amount);
  69. }
  70. @Override
  71. public void onFling(CollapseAmount amount) {
  72. if (screenParams.styleParams.drawScreenBelowTopBar) {
  73. ((CollapsingView) contentView).fling(amount);
  74. }
  75. topBar.fling(amount);
  76. }
  77. },
  78. getCollapseBehaviour()
  79. );
  80. }
  81. private CollapseBehaviour getCollapseBehaviour() {
  82. return screenParams.styleParams.collapsingTopBarParams.collapseBehaviour;
  83. }
  84. }