|
30 | 30 | import android.view.Gravity; |
31 | 31 | import android.view.View; |
32 | 32 | import android.view.ViewGroup; |
| 33 | +import android.view.ViewGroup.LayoutParams; |
| 34 | +import android.view.ViewGroup.MarginLayoutParams; |
33 | 35 | import android.window.BackEvent; |
34 | 36 | import androidx.annotation.GravityInt; |
35 | 37 | import androidx.annotation.NonNull; |
@@ -130,7 +132,7 @@ public void finishBackProgress( |
130 | 132 | @Nullable AnimatorUpdateListener finishAnimatorUpdateListener) { |
131 | 133 | boolean leftSwipeEdge = backEvent.getSwipeEdge() == BackEvent.EDGE_LEFT; |
132 | 134 | boolean leftGravity = checkAbsoluteGravity(gravity, Gravity.LEFT); |
133 | | - float scaledWidth = view.getWidth() * view.getScaleX(); |
| 135 | + float scaledWidth = view.getWidth() * view.getScaleX() + getEdgeMargin(leftGravity); |
134 | 136 | ObjectAnimator finishAnimator = |
135 | 137 | ObjectAnimator.ofFloat(view, View.TRANSLATION_X, leftGravity ? -scaledWidth : scaledWidth); |
136 | 138 | if (finishAnimatorUpdateListener != null) { |
@@ -179,4 +181,13 @@ private boolean checkAbsoluteGravity(@GravityInt int gravity, @GravityInt int ch |
179 | 181 | GravityCompat.getAbsoluteGravity(gravity, ViewCompat.getLayoutDirection(view)); |
180 | 182 | return (absoluteGravity & checkFor) == checkFor; |
181 | 183 | } |
| 184 | + |
| 185 | + private int getEdgeMargin(boolean leftGravity) { |
| 186 | + LayoutParams layoutParams = view.getLayoutParams(); |
| 187 | + if (layoutParams instanceof MarginLayoutParams) { |
| 188 | + MarginLayoutParams marginLayoutParams = (MarginLayoutParams) layoutParams; |
| 189 | + return leftGravity ? marginLayoutParams.leftMargin : marginLayoutParams.rightMargin; |
| 190 | + } |
| 191 | + return 0; |
| 192 | + } |
182 | 193 | } |
0 commit comments