diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/InstanceInfoFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/InstanceInfoFragment.java index eb16f70b6..eed72bd55 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/InstanceInfoFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/InstanceInfoFragment.java @@ -18,9 +18,11 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewOutlineProvider; import android.view.WindowInsets; +import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; +import android.widget.Toolbar; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; @@ -60,6 +62,7 @@ import me.grishka.appkit.imageloader.RecyclerViewDelegate; import me.grishka.appkit.imageloader.ViewImageLoader; import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest; import me.grishka.appkit.utils.BindableViewHolder; +import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; public class InstanceInfoFragment extends LoaderFragment { @@ -88,6 +91,8 @@ public class InstanceInfoFragment extends LoaderFragment { private MetadataAdapter adapter; private ListImageLoaderWrapper imgLoader; + private int statusBarHeight; + private float textMaxHeight, textCollapsedHeight; private LinearLayout.LayoutParams collapseParams, wrapParams; @@ -138,7 +143,6 @@ public class InstanceInfoFragment extends LoaderFragment { readMore.setOnClickListener(this::onReadMoreClick); refreshLayout.setOnRefreshListener(this); - if(loaded){ bindViews(); dataLoaded(); @@ -223,6 +227,7 @@ public class InstanceInfoFragment extends LoaderFragment { public void onViewCreated(View view, Bundle savedInstanceState){ super.onViewCreated(view, savedInstanceState); updateToolbar(); + scrollView.setOnScrollChangeListener(this::onScrollChanged); titleTransY=getToolbar().getLayoutParams().height; if(toolbarTitleView!=null){ toolbarTitleView.setTranslationY(titleTransY); @@ -238,7 +243,7 @@ public class InstanceInfoFragment extends LoaderFragment { @Override public void onApplyWindowInsets(WindowInsets insets){ - int statusBarHeight = insets.getSystemWindowInsetTop(); + statusBarHeight = insets.getSystemWindowInsetTop(); if(contentView!=null){ ((ViewGroup.MarginLayoutParams) getToolbar().getLayoutParams()).topMargin= statusBarHeight; } @@ -326,6 +331,29 @@ public class InstanceInfoFragment extends LoaderFragment { scrollView.smoothScrollTo(0, 0); } + private void onScrollChanged(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY){ + int topBarsH=getToolbar().getHeight()+statusBarHeight; + if(scrollY>cover.getHeight()-topBarsH){ + cover.setTranslationY(scrollY-(cover.getHeight()-topBarsH)); + cover.setTranslationZ(V.dp(10)); + cover.setTransform(cover.getHeight()/2f-topBarsH/2f, 1f); + }else{ + cover.setTranslationY(0f); + cover.setTranslationZ(0f); + cover.setTransform(scrollY/2f, 1f); + } + coverGradient.setTopOffset(scrollY); + cover.invalidate(); + titleTransY=getToolbar().getHeight(); + if(scrollY>textWrap.getTop()-topBarsH){ + titleTransY=Math.max(0f, titleTransY-(scrollY-(textWrap.getTop()-topBarsH))); + } + if(toolbarTitleView!=null){ + toolbarTitleView.setTranslationY(titleTransY); + toolbarSubtitleView.setTranslationY(titleTransY); + } + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){