Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8266115e authored by Tony Wickham's avatar Tony Wickham Committed by Tony
Browse files

Fix popup item animation pivot

Now it is based on the arrow center instead of height / 2
(this used to be the same when all items were separate)

Change-Id: I76c04344400c6d306e8404c1e93765adfbd0fe23
parent 46b3a135
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -120,8 +120,9 @@ public abstract class PopupItemView extends FrameLayout
     */
    public Animator createOpenAnimation(boolean isContainerAboveIcon, boolean pivotLeft) {
        Point center = getIconCenter();
        int arrowCenter = getResources().getDimensionPixelSize(R.dimen.popup_arrow_horizontal_center);
        ValueAnimator openAnimator =  new ZoomRevealOutlineProvider(center.x, center.y,
                mPillRect, this, mIconView, isContainerAboveIcon, pivotLeft)
                mPillRect, this, mIconView, isContainerAboveIcon, pivotLeft, arrowCenter)
                        .createRevealAnimator(this, false);
        mOpenAnimationProgress = 0f;
        openAnimator.addUpdateListener(this);
@@ -143,8 +144,9 @@ public abstract class PopupItemView extends FrameLayout
    public Animator createCloseAnimation(boolean isContainerAboveIcon, boolean pivotLeft,
            long duration) {
        Point center = getIconCenter();
        int arrowCenter = getResources().getDimensionPixelSize(R.dimen.popup_arrow_horizontal_center);
        ValueAnimator closeAnimator = new ZoomRevealOutlineProvider(center.x, center.y,
                mPillRect, this, mIconView, isContainerAboveIcon, pivotLeft)
                mPillRect, this, mIconView, isContainerAboveIcon, pivotLeft, arrowCenter)
                        .createRevealAnimator(this, true);
        // Scale down the duration and interpolator according to the progress
        // that the open animation was at when the close started.
@@ -188,9 +190,10 @@ public abstract class PopupItemView extends FrameLayout

        private final boolean mPivotLeft;
        private final float mTranslateX;
        private final float mArrowCenter;

        public ZoomRevealOutlineProvider(int x, int y, Rect pillRect, PopupItemView translateView,
                View zoomView, boolean isContainerAboveIcon, boolean pivotLeft) {
                View zoomView, boolean isContainerAboveIcon, boolean pivotLeft, float arrowCenter) {
            super(x, y, pillRect, translateView.getBackgroundRadius());
            mTranslateView = translateView;
            mZoomView = zoomView;
@@ -199,7 +202,8 @@ public abstract class PopupItemView extends FrameLayout
            mTranslateYMultiplier = isContainerAboveIcon ? 0.5f : -0.5f;

            mPivotLeft = pivotLeft;
            mTranslateX = pivotLeft ? pillRect.height() / 2 : pillRect.right - pillRect.height() / 2;
            mTranslateX = pivotLeft ? arrowCenter : pillRect.right - arrowCenter;
            mArrowCenter = arrowCenter;
        }

        @Override
@@ -214,7 +218,8 @@ public abstract class PopupItemView extends FrameLayout
            float height = mOutline.height();
            mTranslateView.setTranslationY(mTranslateYMultiplier * (mFullHeight - height));

            float pivotX = mPivotLeft ? (mOutline.left + height / 2) : (mOutline.right - height / 2);
            float offsetX = Math.min(mOutline.width(), mArrowCenter);
            float pivotX = mPivotLeft ? (mOutline.left + offsetX) : (mOutline.right - offsetX);
            mTranslateView.setTranslationX(mTranslateX - pivotX);
        }
    }