2D Recents: Fix issues with thumbnail scaling transitions

Draw the task view header again, make sure it is visible through
the whole transition, and that it scales as appropriate.

Bug: 33752154
Test: Checked/screencasted app -> recents -> app transitions.
Change-Id: I9b87183cba51d5469ea9d45181bccfafeb85cff2
This commit is contained in:
Manu Cornet
2017-01-24 18:19:05 +09:00
parent 70f920fa0c
commit 57b6149f8b
2 changed files with 17 additions and 9 deletions

View File

@@ -733,11 +733,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
Task toTask = new Task();
TaskViewTransform toTransform = getThumbnailTransitionTransform(stackView, toTask,
windowOverrideRect);
// When using a grid layout, the header is already visible on screen at the target
// location, making it unnecessary to draw it in the transition thumbnail.
Bitmap thumbnail = stackView.useGridLayout()
? mThumbTransitionBitmapCache.createAshmemBitmap()
: drawThumbnailTransitionBitmap(toTask, toTransform,
Bitmap thumbnail = drawThumbnailTransitionBitmap(toTask, toTransform,
mThumbTransitionBitmapCache);
if (thumbnail != null) {
RectF toTaskRect = toTransform.rect;

View File

@@ -925,9 +925,9 @@ public class AppTransition implements Dump {
float scaleW = appWidth / thumbWidth;
getNextAppTransitionStartRect(taskId, mTmpRect);
final float fromX;
final float fromY;
float fromY;
final float toX;
final float toY;
float toY;
final float pivotX;
final float pivotY;
if (shouldScaleDownThumbnailTransition(uiMode, orientation)) {
@@ -940,6 +940,12 @@ public class AppTransition implements Dump {
toY = appRect.height() / 2 * (1 - 1 / scaleW) + appRect.top;
pivotX = mTmpRect.width() / 2;
pivotY = appRect.height() / 2 / scaleW;
if (mGridLayoutRecentsEnabled) {
// In the grid layout, the header is displayed above the thumbnail instead of
// overlapping it.
fromY -= thumbHeightI;
toY -= thumbHeightI * scaleW;
}
} else {
pivotX = 0;
pivotY = 0;
@@ -988,7 +994,10 @@ public class AppTransition implements Dump {
// This AnimationSet uses the Interpolators assigned above.
AnimationSet set = new AnimationSet(false);
set.addAnimation(scale);
set.addAnimation(alpha);
if (!mGridLayoutRecentsEnabled) {
// In the grid layout, the header should be shown for the whole animation.
set.addAnimation(alpha);
}
set.addAnimation(translate);
set.addAnimation(clipAnim);
a = set;
@@ -1007,7 +1016,10 @@ public class AppTransition implements Dump {
// This AnimationSet uses the Interpolators assigned above.
AnimationSet set = new AnimationSet(false);
set.addAnimation(scale);
set.addAnimation(alpha);
if (!mGridLayoutRecentsEnabled) {
// In the grid layout, the header should be shown for the whole animation.
set.addAnimation(alpha);
}
set.addAnimation(translate);
a = set;