From a6890fc8dd486a2bfbe06a645ea5681e0dbfbf3c Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Tue, 30 Jul 2019 14:25:35 -0400 Subject: [PATCH] Video playback on TextureView and DepthPageTransformer. --- res/layout-v16/video_player.xml | 17 -------- res/layout/video_player.xml | 23 ++++++----- .../securesms/MediaPreviewActivity.java | 2 + .../animation/DepthPageTransformer.java | 40 +++++++++++++++++++ 4 files changed, 56 insertions(+), 26 deletions(-) delete mode 100644 res/layout-v16/video_player.xml create mode 100644 src/org/thoughtcrime/securesms/animation/DepthPageTransformer.java diff --git a/res/layout-v16/video_player.xml b/res/layout-v16/video_player.xml deleted file mode 100644 index b855fca65a..0000000000 --- a/res/layout-v16/video_player.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/layout/video_player.xml b/res/layout/video_player.xml index 144e0f51ec..8a958bcb94 100644 --- a/res/layout/video_player.xml +++ b/res/layout/video_player.xml @@ -1,13 +1,18 @@ - + - + \ No newline at end of file diff --git a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java index 809f8f3e3a..a247bfe493 100644 --- a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -47,6 +47,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; +import org.thoughtcrime.securesms.animation.DepthPageTransformer; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.components.viewpager.ExtendedOnPageChangedListener; import org.thoughtcrime.securesms.database.Address; @@ -192,6 +193,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActionBarActiv private void initializeViews() { mediaPager = findViewById(R.id.media_pager); mediaPager.setOffscreenPageLimit(1); + mediaPager.setPageTransformer(true, new DepthPageTransformer()); viewPagerListener = new ViewPagerListener(); mediaPager.addOnPageChangeListener(viewPagerListener); diff --git a/src/org/thoughtcrime/securesms/animation/DepthPageTransformer.java b/src/org/thoughtcrime/securesms/animation/DepthPageTransformer.java new file mode 100644 index 0000000000..da935281b3 --- /dev/null +++ b/src/org/thoughtcrime/securesms/animation/DepthPageTransformer.java @@ -0,0 +1,40 @@ +package org.thoughtcrime.securesms.animation; + +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.viewpager.widget.ViewPager; + +/** + * Based on https://developer.android.com/training/animation/screen-slide#depth-page + */ +public final class DepthPageTransformer implements ViewPager.PageTransformer { + private static final float MIN_SCALE = 0.75f; + + public void transformPage(@NonNull View view, float position) { + final int pageWidth = view.getWidth(); + + if (position < -1f) { + view.setAlpha(0f); + + } else if (position <= 0f) { + view.setAlpha(1f); + view.setTranslationX(0f); + view.setScaleX(1f); + view.setScaleY(1f); + + } else if (position <= 1f) { + view.setAlpha(1f - position); + + view.setTranslationX(pageWidth * -position); + + final float scaleFactor = MIN_SCALE + (1f - MIN_SCALE) * (1f - Math.abs(position)); + + view.setScaleX(scaleFactor); + view.setScaleY(scaleFactor); + + } else { + view.setAlpha(0f); + } + } +}