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.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){