react-native-navigation的迁移库

BottomTabsOptionsPresenter.java 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.reactnativenavigation.presentation;
  2. import android.view.ViewGroup;
  3. import android.view.ViewGroup.MarginLayoutParams;
  4. import com.reactnativenavigation.anim.BottomTabsAnimator;
  5. import com.reactnativenavigation.parse.AnimationsOptions;
  6. import com.reactnativenavigation.parse.BottomTabsOptions;
  7. import com.reactnativenavigation.parse.Options;
  8. import com.reactnativenavigation.utils.UiUtils;
  9. import com.reactnativenavigation.viewcontrollers.ViewController;
  10. import com.reactnativenavigation.viewcontrollers.bottomtabs.BottomTabFinder;
  11. import com.reactnativenavigation.viewcontrollers.bottomtabs.TabSelector;
  12. import com.reactnativenavigation.views.BottomTabs;
  13. import com.reactnativenavigation.views.Component;
  14. import java.util.List;
  15. public class BottomTabsOptionsPresenter {
  16. private final BottomTabFinder bottomTabFinder;
  17. private final List<ViewController> tabs;
  18. private Options defaultOptions;
  19. private BottomTabs bottomTabs;
  20. private BottomTabsAnimator animator;
  21. private TabSelector tabSelector;
  22. public BottomTabsOptionsPresenter(List<ViewController> tabs, Options defaultOptions) {
  23. this.tabs = tabs;
  24. this.defaultOptions = defaultOptions;
  25. this.bottomTabFinder = new BottomTabFinder(tabs);
  26. }
  27. public void setDefaultOptions(Options defaultOptions) {
  28. this.defaultOptions = defaultOptions;
  29. }
  30. public void bindView(BottomTabs bottomTabs, TabSelector tabSelector) {
  31. this.bottomTabs = bottomTabs;
  32. this.tabSelector = tabSelector;
  33. animator = new BottomTabsAnimator(bottomTabs);
  34. }
  35. public void applyLayoutParamsOptions(Options options, int tabIndex) {
  36. Options withDefaultOptions = options.copy().withDefaultOptions(defaultOptions);
  37. applyDrawBehind(withDefaultOptions.bottomTabsOptions, tabIndex);
  38. }
  39. public void present(Options options) {
  40. Options withDefaultOptions = options.copy().withDefaultOptions(defaultOptions);
  41. applyBottomTabsOptions(withDefaultOptions.bottomTabsOptions, withDefaultOptions.animations);
  42. }
  43. public void presentChildOptions(Options options, Component child) {
  44. Options withDefaultOptions = options.copy().withDefaultOptions(defaultOptions);
  45. applyBottomTabsOptions(withDefaultOptions.bottomTabsOptions, withDefaultOptions.animations);
  46. int tabIndex = bottomTabFinder.findByComponent(child);
  47. applyDrawBehind(withDefaultOptions.bottomTabsOptions, tabIndex);
  48. }
  49. private void applyDrawBehind(BottomTabsOptions options, int tabIndex) {
  50. ViewGroup tab = tabs.get(tabIndex).getView();
  51. MarginLayoutParams lp = (MarginLayoutParams) tab.getLayoutParams();
  52. if (options.drawBehind.isTrue()) {
  53. lp.bottomMargin = 0;
  54. }
  55. if (options.visible.isTrueOrUndefined() && options.drawBehind.isFalseOrUndefined()) {
  56. if (bottomTabs.getHeight() == 0) {
  57. UiUtils.runOnPreDrawOnce(bottomTabs, () -> lp.bottomMargin = bottomTabs.getHeight());
  58. } else {
  59. lp.bottomMargin = bottomTabs.getHeight();
  60. }
  61. }
  62. }
  63. private void applyBottomTabsOptions(BottomTabsOptions options, AnimationsOptions animationsOptions) {
  64. if (options.titleDisplayMode.hasValue()) {
  65. bottomTabs.setTitleState(options.titleDisplayMode.toState());
  66. }
  67. if (options.backgroundColor.hasValue()) {
  68. bottomTabs.setBackgroundColor(options.backgroundColor.get());
  69. }
  70. if (options.currentTabIndex.hasValue()) {
  71. int tabIndex = options.currentTabIndex.get();
  72. if (tabIndex >= 0) tabSelector.selectTab(tabIndex);
  73. }
  74. if (options.testId.hasValue()) {
  75. bottomTabs.setTag(options.testId.get());
  76. }
  77. if (options.currentTabId.hasValue()) {
  78. int tabIndex = bottomTabFinder.findByControllerId(options.currentTabId.get());
  79. if (tabIndex >= 0) tabSelector.selectTab(tabIndex);
  80. }
  81. if (options.visible.isTrueOrUndefined()) {
  82. if (options.animate.isTrueOrUndefined()) {
  83. animator.show(animationsOptions);
  84. } else {
  85. bottomTabs.restoreBottomNavigation(false);
  86. }
  87. }
  88. if (options.visible.isFalse()) {
  89. if (options.animate.isTrueOrUndefined()) {
  90. animator.hide(animationsOptions);
  91. } else {
  92. bottomTabs.hideBottomNavigation(false);
  93. }
  94. }
  95. }
  96. }