feat: better toolbar behavior on instance about fragment

This commit is contained in:
LucasGGamerM
2023-06-04 17:45:38 -03:00
parent ac8b950893
commit 9d78bb508a

View File

@@ -18,9 +18,11 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewOutlineProvider; import android.view.ViewOutlineProvider;
import android.view.WindowInsets; import android.view.WindowInsets;
import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ScrollView; import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toolbar;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager; 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.ViewImageLoader;
import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest; import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest;
import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.BindableViewHolder;
import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.UsableRecyclerView; import me.grishka.appkit.views.UsableRecyclerView;
public class InstanceInfoFragment extends LoaderFragment { public class InstanceInfoFragment extends LoaderFragment {
@@ -88,6 +91,8 @@ public class InstanceInfoFragment extends LoaderFragment {
private MetadataAdapter adapter; private MetadataAdapter adapter;
private ListImageLoaderWrapper imgLoader; private ListImageLoaderWrapper imgLoader;
private int statusBarHeight;
private float textMaxHeight, textCollapsedHeight; private float textMaxHeight, textCollapsedHeight;
private LinearLayout.LayoutParams collapseParams, wrapParams; private LinearLayout.LayoutParams collapseParams, wrapParams;
@@ -138,7 +143,6 @@ public class InstanceInfoFragment extends LoaderFragment {
readMore.setOnClickListener(this::onReadMoreClick); readMore.setOnClickListener(this::onReadMoreClick);
refreshLayout.setOnRefreshListener(this); refreshLayout.setOnRefreshListener(this);
if(loaded){ if(loaded){
bindViews(); bindViews();
dataLoaded(); dataLoaded();
@@ -223,6 +227,7 @@ public class InstanceInfoFragment extends LoaderFragment {
public void onViewCreated(View view, Bundle savedInstanceState){ public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
updateToolbar(); updateToolbar();
scrollView.setOnScrollChangeListener(this::onScrollChanged);
titleTransY=getToolbar().getLayoutParams().height; titleTransY=getToolbar().getLayoutParams().height;
if(toolbarTitleView!=null){ if(toolbarTitleView!=null){
toolbarTitleView.setTranslationY(titleTransY); toolbarTitleView.setTranslationY(titleTransY);
@@ -238,7 +243,7 @@ public class InstanceInfoFragment extends LoaderFragment {
@Override @Override
public void onApplyWindowInsets(WindowInsets insets){ public void onApplyWindowInsets(WindowInsets insets){
int statusBarHeight = insets.getSystemWindowInsetTop(); statusBarHeight = insets.getSystemWindowInsetTop();
if(contentView!=null){ if(contentView!=null){
((ViewGroup.MarginLayoutParams) getToolbar().getLayoutParams()).topMargin= statusBarHeight; ((ViewGroup.MarginLayoutParams) getToolbar().getLayoutParams()).topMargin= statusBarHeight;
} }
@@ -326,6 +331,29 @@ public class InstanceInfoFragment extends LoaderFragment {
scrollView.smoothScrollTo(0, 0); 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 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){