|
34 | 34 | import android.view.Menu;
|
35 | 35 | import android.view.View;
|
36 | 36 | import android.view.ViewGroup.MarginLayoutParams;
|
| 37 | +import android.view.ViewParent; |
37 | 38 | import android.widget.EditText;
|
38 | 39 | import android.widget.FrameLayout;
|
39 | 40 | import android.widget.ImageButton;
|
@@ -574,24 +575,34 @@ private Animator getTranslationAnimatorForText(boolean show, View v) {
|
574 | 575 | && textView.getHint() != textView.getText()) {
|
575 | 576 | String text = textView.getText().toString();
|
576 | 577 | Rect bounds = new Rect();
|
577 |
| - |
578 | 578 | textView.getPaint().getTextBounds(text, 0, text.length(), bounds);
|
579 | 579 | additionalMovement = max(0, searchBar.getTextView().getMeasuredWidth() / 2 - bounds.width() / 2);
|
580 | 580 | }
|
581 |
| - int[] searchBarTextViewLoc = new int[2]; |
582 |
| - searchBar.getTextView().getLocationOnScreen(searchBarTextViewLoc); |
583 |
| - int[] searchBarLoc = new int[2]; |
584 |
| - searchBar.getLocationOnScreen(searchBarLoc); |
585 |
| - int[] searchViewToolbarLoc = new int[2]; |
586 |
| - searchView.getToolbar().getLocationOnScreen(searchViewToolbarLoc); |
587 |
| - |
588 | 581 | int startX =
|
589 |
| - searchBarTextViewLoc[0] |
590 |
| - - searchViewToolbarLoc[0] |
| 582 | + getViewLeftFromSearchViewParent(searchBar.getTextView()) |
591 | 583 | + additionalMovement
|
592 | 584 | - (v.getLeft() + textContainer.getLeft());
|
593 |
| - return getTranslationAnimator( |
594 |
| - show, v, startX, getFromTranslationY(searchBarLoc[1] - searchViewToolbarLoc[1])); |
| 585 | + return getTranslationAnimator(show, v, startX, getFromTranslationY()); |
| 586 | + } |
| 587 | + |
| 588 | + private int getViewLeftFromSearchViewParent(@NonNull View v) { |
| 589 | + int left = v.getLeft(); |
| 590 | + ViewParent viewParent = v.getParent(); |
| 591 | + while (viewParent instanceof View && viewParent != searchView.getParent()) { |
| 592 | + left += ((View) viewParent).getLeft(); |
| 593 | + viewParent = viewParent.getParent(); |
| 594 | + } |
| 595 | + return left; |
| 596 | + } |
| 597 | + |
| 598 | + private int getViewTopFromSearchViewParent(@NonNull View v) { |
| 599 | + int top = v.getTop(); |
| 600 | + ViewParent viewParent = v.getParent(); |
| 601 | + while (viewParent instanceof View && viewParent != searchView.getParent()) { |
| 602 | + top += ((View) viewParent).getTop(); |
| 603 | + viewParent = viewParent.getParent(); |
| 604 | + } |
| 605 | + return top; |
595 | 606 | }
|
596 | 607 |
|
597 | 608 | private Animator getContentAnimator(boolean show) {
|
@@ -667,19 +678,12 @@ private int getFromTranslationXEnd(View view) {
|
667 | 678 | : searchBar.getRight() - searchView.getWidth() + marginEnd;
|
668 | 679 | }
|
669 | 680 |
|
670 |
| - private int getFromTranslationY(int searchBarViewVerticalDistance) { |
671 |
| - return searchBarViewVerticalDistance |
672 |
| - + searchBar.getMeasuredHeight() / 2 |
673 |
| - - toolbarContainer.getMeasuredHeight() / 2; |
674 |
| - } |
675 |
| - |
676 | 681 | private int getFromTranslationY() {
|
677 |
| - int[] searchBarLoc = new int[2]; |
678 |
| - searchBar.getLocationOnScreen(searchBarLoc); |
679 |
| - int[] searchViewToolbarLoc = new int[2]; |
680 |
| - searchView.getToolbar().getLocationOnScreen(searchViewToolbarLoc); |
681 |
| - |
682 |
| - return getFromTranslationY(searchBarLoc[1] - searchViewToolbarLoc[1]); |
| 682 | + int toolbarMiddleY = toolbarContainer.getTop() + toolbarContainer.getMeasuredHeight() / 2; |
| 683 | + int searchBarMiddleY = |
| 684 | + getViewTopFromSearchViewParent(searchBar) |
| 685 | + + searchBar.getMeasuredHeight() / 2; |
| 686 | + return searchBarMiddleY - toolbarMiddleY; |
683 | 687 | }
|
684 | 688 |
|
685 | 689 | private void setUpDummyToolbarIfNeeded() {
|
|
0 commit comments