react-native-navigation的迁移库

TitleBar.java 3.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.reactnativenavigation.views;
  2. import android.content.Context;
  3. import android.support.v7.widget.Toolbar;
  4. import android.view.Menu;
  5. import com.reactnativenavigation.animation.VisibilityAnimator;
  6. import com.reactnativenavigation.params.ScreenStyleParams;
  7. import com.reactnativenavigation.params.TitleBarButtonParams;
  8. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  9. import java.util.List;
  10. public class TitleBar extends Toolbar {
  11. private boolean hideOnScroll = false;
  12. private VisibilityAnimator visibilityAnimator;
  13. private LeftButton leftButton;
  14. public TitleBar(Context context) {
  15. super(context);
  16. }
  17. public void setRightButtons(List<TitleBarButtonParams> rightButtons, String navigatorEventId) {
  18. Menu menu = getMenu();
  19. menu.clear();
  20. if (rightButtons == null) {
  21. return;
  22. }
  23. addButtonsToTitleBar(rightButtons, navigatorEventId, menu);
  24. }
  25. public void setLeftButton(TitleBarLeftButtonParams leftButtonParams,
  26. TitleBarBackButtonListener titleBarBackButtonListener, String navigatorEventId) {
  27. if (shouldSetLeftButton(leftButtonParams)) {
  28. createAndSetLeftButton(leftButtonParams, titleBarBackButtonListener, navigatorEventId);
  29. } else if (hasLeftButton()) {
  30. updateLeftButton(leftButtonParams);
  31. }
  32. }
  33. public void setStyle(ScreenStyleParams params) {
  34. setVisibility(params.titleBarHidden ? GONE : VISIBLE);
  35. }
  36. private void addButtonsToTitleBar(List<TitleBarButtonParams> rightButtons, String navigatorEventId, Menu menu) {
  37. for (int i = 0; i < rightButtons.size(); i++) {
  38. final TitleBarButton button = new TitleBarButton(menu, this, rightButtons.get(i), navigatorEventId);
  39. addButtonInReverseOrder(rightButtons, i, button);
  40. }
  41. }
  42. private void addButtonInReverseOrder(List<TitleBarButtonParams> rightButtons, int i, TitleBarButton button) {
  43. final int index = rightButtons.size() - i - 1;
  44. button.addToMenu(index);
  45. }
  46. private boolean hasLeftButton() {
  47. return leftButton != null;
  48. }
  49. private void updateLeftButton(TitleBarLeftButtonParams leftButtonParams) {
  50. leftButton.setIconState(leftButtonParams);
  51. }
  52. private boolean shouldSetLeftButton(TitleBarLeftButtonParams leftButtonParams) {
  53. return leftButton == null && leftButtonParams != null;
  54. }
  55. private void createAndSetLeftButton(TitleBarLeftButtonParams leftButtonParams, TitleBarBackButtonListener titleBarBackButtonListener, String navigatorEventId) {
  56. leftButton = new LeftButton(getContext(), leftButtonParams, titleBarBackButtonListener, navigatorEventId);
  57. setNavigationOnClickListener(leftButton);
  58. setNavigationIcon(leftButton);
  59. }
  60. public void setHideOnScroll(boolean hideOnScroll) {
  61. this.hideOnScroll = hideOnScroll;
  62. }
  63. public void onScrollChanged(ScrollDirectionListener.Direction direction) {
  64. if (hideOnScroll) {
  65. if (visibilityAnimator == null) {
  66. createScrollAnimator();
  67. }
  68. visibilityAnimator.onScrollChanged(direction);
  69. }
  70. }
  71. private void createScrollAnimator() {
  72. visibilityAnimator = new VisibilityAnimator(this, VisibilityAnimator.HideDirection.Up, getHeight());
  73. }
  74. }