From 7753c500dbfdd4e73fdb8517d3e740ee4b69a48c Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 24 Feb 2023 16:53:14 +0100 Subject: Do not jump bottom sheet when playing (#6342) Whenever some view calls requestLayout(), the bottom view jumps. This happens during slide when setting the player from GONE to VISIBLE. Also, it happens every time the position changes because the TextView has a dynamic width. We are not actually interested in the dynamic width and can simply keep the initial width. This avoids requestLayout() calls every time the position is updated. --- .../antennapod/fragment/AudioPlayerFragment.java | 2 +- .../danoeh/antennapod/view/NoRelayoutTextView.java | 28 ++++++++++++++++++++++ app/src/main/res/layout/audioplayer_fragment.xml | 5 ++-- 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java (limited to 'app') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java index e93db2d2a..51cb28eb8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java @@ -528,7 +528,7 @@ public class AudioPlayerFragment extends Fragment implements float playerFadeProgress = Math.max(0.0f, Math.min(0.2f, slideOffset - 0.2f)) / 0.2f; View player = getView().findViewById(R.id.playerFragment); player.setAlpha(1 - playerFadeProgress); - player.setVisibility(playerFadeProgress > 0.99f ? View.GONE : View.VISIBLE); + player.setVisibility(playerFadeProgress > 0.99f ? View.INVISIBLE : View.VISIBLE); float toolbarFadeProgress = Math.max(0.0f, Math.min(0.2f, slideOffset - 0.6f)) / 0.2f; toolbar.setAlpha(toolbarFadeProgress); toolbar.setVisibility(toolbarFadeProgress < 0.01f ? View.INVISIBLE : View.VISIBLE); diff --git a/app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java b/app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java new file mode 100644 index 000000000..3f921b445 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java @@ -0,0 +1,28 @@ +package de.danoeh.antennapod.view; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +public class NoRelayoutTextView extends AppCompatTextView { + public NoRelayoutTextView(@NonNull Context context) { + super(context); + } + + public NoRelayoutTextView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public NoRelayoutTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @SuppressLint("MissingSuperCall") + @Override + public void requestLayout() { + // Deliberate no-op + } +} diff --git a/app/src/main/res/layout/audioplayer_fragment.xml b/app/src/main/res/layout/audioplayer_fragment.xml index 496875a5f..87225e783 100644 --- a/app/src/main/res/layout/audioplayer_fragment.xml +++ b/app/src/main/res/layout/audioplayer_fragment.xml @@ -104,7 +104,7 @@ android:paddingLeft="8dp" android:paddingRight="8dp"> - -