Merge "Fix Transition test failure." into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
dbd11d6c8b
@@ -27,6 +27,7 @@ import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.transition.TransitionUtils;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ImageView.ScaleType;
|
||||
|
||||
@@ -202,7 +203,8 @@ public abstract class SharedElementCallback {
|
||||
} else {
|
||||
mTempMatrix.set(viewToGlobalMatrix);
|
||||
}
|
||||
return TransitionUtils.createViewBitmap(sharedElement, mTempMatrix, screenBounds);
|
||||
ViewGroup parent = (ViewGroup) sharedElement.getParent();
|
||||
return TransitionUtils.createViewBitmap(sharedElement, mTempMatrix, screenBounds, parent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -101,7 +101,7 @@ public class TransitionUtils {
|
||||
|
||||
ImageView copy = new ImageView(view.getContext());
|
||||
copy.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||
Bitmap bitmap = createViewBitmap(view, matrix, bounds);
|
||||
Bitmap bitmap = createViewBitmap(view, matrix, bounds, sceneRoot);
|
||||
if (bitmap != null) {
|
||||
copy.setImageBitmap(bitmap);
|
||||
}
|
||||
@@ -156,11 +156,18 @@ public class TransitionUtils {
|
||||
* returning.
|
||||
* @param bounds The bounds of the bitmap in the destination coordinate system (where the
|
||||
* view should be presented. Typically, this is matrix.mapRect(viewBounds);
|
||||
* @param sceneRoot A ViewGroup that is attached to the window to temporarily contain the view
|
||||
* if it isn't attached to the window.
|
||||
* @return A bitmap of the given view or null if bounds has no width or height.
|
||||
*/
|
||||
public static Bitmap createViewBitmap(View view, Matrix matrix, RectF bounds) {
|
||||
if (!view.isAttachedToWindow()) {
|
||||
return null;
|
||||
public static Bitmap createViewBitmap(View view, Matrix matrix, RectF bounds,
|
||||
ViewGroup sceneRoot) {
|
||||
final boolean addToOverlay = !view.isAttachedToWindow();
|
||||
if (addToOverlay) {
|
||||
if (sceneRoot == null || !sceneRoot.isAttachedToWindow()) {
|
||||
return null;
|
||||
}
|
||||
sceneRoot.getOverlay().add(view);
|
||||
}
|
||||
Bitmap bitmap = null;
|
||||
int bitmapWidth = Math.round(bounds.width());
|
||||
@@ -181,6 +188,9 @@ public class TransitionUtils {
|
||||
node.end(canvas);
|
||||
bitmap = ThreadedRenderer.createHardwareBitmap(node, bitmapWidth, bitmapHeight);
|
||||
}
|
||||
if (addToOverlay) {
|
||||
sceneRoot.getOverlay().remove(view);
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user