Improves overview split adjacent launch animation

* Translation gets scaled along with the parent,
so the secondary thumbnailView which has a translate on
it gets exaggerated as the parent goes to fullscreen
scale.
* Now we inversely scale translationX/Y properties,
however it seems like the interpolation is still slighly
off at the beginning of the animation (or maybe some other
value, such as pivot, etc)

Bug: 260814999
Test: Manually slowed down animation and observed
Change-Id: I831476b4ffb582fecbd166525ceea33623e66bdd
This commit is contained in:
Vinit Nayak
2023-01-04 12:07:56 -08:00
parent 2c32fd8433
commit 9740ba4bf1
2 changed files with 23 additions and 0 deletions
@@ -22,6 +22,8 @@ import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y;
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.QuickstepTransitionManager.ANIMATION_DELAY_NAV_FADE_IN;
@@ -330,6 +332,17 @@ public final class TaskViewUtils {
Matrix localMti = new Matrix();
localMt.invert(localMti);
mti[i] = localMti;
// Translations for child thumbnails also get scaled as the parent taskView scales
// Add inverse scaling to keep translations the same
float translationY = ttv.getTranslationY();
float translationX = ttv.getTranslationX();
float fullScreenScale =
topMostSimulators[i].getTaskViewSimulator().getFullScreenScale();
out.addFloat(ttv, VIEW_TRANSLATE_Y, translationY,
translationY / fullScreenScale, TOUCH_RESPONSE_INTERPOLATOR);
out.addFloat(ttv, VIEW_TRANSLATE_X, translationX,
translationX / fullScreenScale, TOUCH_RESPONSE_INTERPOLATOR);
}
Matrix[] k0i = new Matrix[matrixSize];
+10
View File
@@ -768,4 +768,14 @@ public final class Utilities {
public static float getYVelocity(VelocityTracker velocityTracker, MotionEvent event) {
return getYVelocity(velocityTracker, event, -1 /* ACTIVE_POINTER_ID */);
}
/** Logs the Scale and Translate properties of a matrix. Ignores skew and perspective. */
public static void logMatrix(String label, Matrix matrix) {
float[] matrixValues = new float[9];
matrix.getValues(matrixValues);
Log.d(label, String.format("%s: %s\nscale (x,y) = (%f, %f)\ntranslate (x,y) = (%f, %f)",
label, matrix, matrixValues[Matrix.MSCALE_X], matrixValues[Matrix.MSCALE_Y],
matrixValues[Matrix.MTRANS_X], matrixValues[Matrix.MTRANS_Y]
));
}
}