feat: better toolbar behavior on instance about fragment
This commit is contained in:
@@ -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){
|
||||||
|
|||||||
Reference in New Issue
Block a user