From f764fe70b0306d7650cf83345f06ce3dd753470e Mon Sep 17 00:00:00 2001 From: Bei Yi Date: Thu, 17 Aug 2017 11:01:42 -0700 Subject: [PATCH 1/3] Support crop mode for AspectRatioFrameLayout --- .../exoplayer2/ui/AspectRatioFrameLayout.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java index b0df16b484..2f04b8800d 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java @@ -32,7 +32,7 @@ public final class AspectRatioFrameLayout extends FrameLayout { * Resize modes for {@link AspectRatioFrameLayout}. */ @Retention(RetentionPolicy.SOURCE) - @IntDef({RESIZE_MODE_FIT, RESIZE_MODE_FIXED_WIDTH, RESIZE_MODE_FIXED_HEIGHT, RESIZE_MODE_FILL}) + @IntDef({RESIZE_MODE_FIT, RESIZE_MODE_FIXED_WIDTH, RESIZE_MODE_FIXED_HEIGHT, RESIZE_MODE_FILL, RESIZE_MODE_CROP}) public @interface ResizeMode {} /** @@ -51,6 +51,10 @@ public final class AspectRatioFrameLayout extends FrameLayout { * The specified aspect ratio is ignored. */ public static final int RESIZE_MODE_FILL = 3; + /** + * The height or width is increased or decreased to crop and to obtain the desired aspect ratio. + */ + public static final int RESIZE_MODE_CROP = 4; /** * The {@link FrameLayout} will not resize itself if the fractional difference between its natural @@ -96,6 +100,15 @@ public final class AspectRatioFrameLayout extends FrameLayout { } } + /** + * Gets the resize mode. + * + * @return The resize mode. + */ + public int getResizeMode() { + return this.resizeMode; + } + /** * Sets the resize mode. * @@ -132,6 +145,13 @@ public final class AspectRatioFrameLayout extends FrameLayout { case RESIZE_MODE_FIXED_HEIGHT: width = (int) (height * videoAspectRatio); break; + case RESIZE_MODE_CROP: + if (videoAspectRatio > viewAspectRatio) { + width = (int) (height * videoAspectRatio); + } else { + height = (int) (width / videoAspectRatio); + } + break; default: if (aspectDeformation > 0) { height = (int) (width / videoAspectRatio); From 50c485652cb0b52f593b8a4035dcd50e050747e1 Mon Sep 17 00:00:00 2001 From: Bei Yi Date: Thu, 24 Aug 2017 14:31:33 -0700 Subject: [PATCH 2/3] Support aspect ratio fill mode for AspectRatioFrameLayout --- .../android/exoplayer2/ui/AspectRatioFrameLayout.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java index 2f04b8800d..9b93b3a867 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java @@ -32,7 +32,7 @@ public final class AspectRatioFrameLayout extends FrameLayout { * Resize modes for {@link AspectRatioFrameLayout}. */ @Retention(RetentionPolicy.SOURCE) - @IntDef({RESIZE_MODE_FIT, RESIZE_MODE_FIXED_WIDTH, RESIZE_MODE_FIXED_HEIGHT, RESIZE_MODE_FILL, RESIZE_MODE_CROP}) + @IntDef({RESIZE_MODE_FIT, RESIZE_MODE_FIXED_WIDTH, RESIZE_MODE_FIXED_HEIGHT, RESIZE_MODE_FILL, RESIZE_MODE_ASPECT_FILL}) public @interface ResizeMode {} /** @@ -52,9 +52,9 @@ public final class AspectRatioFrameLayout extends FrameLayout { */ public static final int RESIZE_MODE_FILL = 3; /** - * The height or width is increased or decreased to crop and to obtain the desired aspect ratio. + * Either height or width is increased to obtain the desired aspect ratio. */ - public static final int RESIZE_MODE_CROP = 4; + public static final int RESIZE_MODE_ASPECT_FILL = 4; /** * The {@link FrameLayout} will not resize itself if the fractional difference between its natural @@ -145,7 +145,7 @@ public final class AspectRatioFrameLayout extends FrameLayout { case RESIZE_MODE_FIXED_HEIGHT: width = (int) (height * videoAspectRatio); break; - case RESIZE_MODE_CROP: + case RESIZE_MODE_ASPECT_FILL: if (videoAspectRatio > viewAspectRatio) { width = (int) (height * videoAspectRatio); } else { From b0848216786d6ebfd35c898286ebdd22e4aa5234 Mon Sep 17 00:00:00 2001 From: Bei Yi Date: Thu, 24 Aug 2017 16:13:44 -0700 Subject: [PATCH 3/3] Support zoom mode for AspectRatioFrameLayout --- .../android/exoplayer2/ui/AspectRatioFrameLayout.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java index 9b93b3a867..3367a46374 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.java @@ -32,7 +32,7 @@ public final class AspectRatioFrameLayout extends FrameLayout { * Resize modes for {@link AspectRatioFrameLayout}. */ @Retention(RetentionPolicy.SOURCE) - @IntDef({RESIZE_MODE_FIT, RESIZE_MODE_FIXED_WIDTH, RESIZE_MODE_FIXED_HEIGHT, RESIZE_MODE_FILL, RESIZE_MODE_ASPECT_FILL}) + @IntDef({RESIZE_MODE_FIT, RESIZE_MODE_FIXED_WIDTH, RESIZE_MODE_FIXED_HEIGHT, RESIZE_MODE_FILL, RESIZE_MODE_ZOOM}) public @interface ResizeMode {} /** @@ -54,7 +54,7 @@ public final class AspectRatioFrameLayout extends FrameLayout { /** * Either height or width is increased to obtain the desired aspect ratio. */ - public static final int RESIZE_MODE_ASPECT_FILL = 4; + public static final int RESIZE_MODE_ZOOM = 4; /** * The {@link FrameLayout} will not resize itself if the fractional difference between its natural @@ -145,7 +145,7 @@ public final class AspectRatioFrameLayout extends FrameLayout { case RESIZE_MODE_FIXED_HEIGHT: width = (int) (height * videoAspectRatio); break; - case RESIZE_MODE_ASPECT_FILL: + case RESIZE_MODE_ZOOM: if (videoAspectRatio > viewAspectRatio) { width = (int) (height * videoAspectRatio); } else {