refactor(compose-fab): show fab after small scroll distance

This commit is contained in:
FineFindus 2023-01-25 18:09:10 -03:00 committed by LucasGGamerM
parent 6cf8793efe
commit ececa7aa2f
4 changed files with 59 additions and 19 deletions

View file

@ -71,7 +71,7 @@ public class AccountTimelineFragment extends StatusListFragment{
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState){ public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
fab = ((ProfileFragment) getParentFragment()).getFab(); // fab = ((ProfileFragment) getParentFragment()).getFab();
} }
@Override @Override

View file

@ -74,8 +74,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
protected String accountID; protected String accountID;
protected PhotoViewer currentPhotoViewer; protected PhotoViewer currentPhotoViewer;
protected ImageButton fab; protected ImageButton fab;
protected boolean isScrollingUp = false; protected int scrollDiff = 0;
// protected boolean isFirstLaunch = true;
protected HashMap<String, Account> knownAccounts=new HashMap<>(); protected HashMap<String, Account> knownAccounts=new HashMap<>();
protected HashMap<String, Relationship> relationships=new HashMap<>(); protected HashMap<String, Relationship> relationships=new HashMap<>();
protected Rect tmpRect=new Rect(); protected Rect tmpRect=new Rect();
@ -285,10 +284,9 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy){ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy){
if(currentPhotoViewer!=null) if(currentPhotoViewer!=null)
currentPhotoViewer.offsetView(-dx, -dy); currentPhotoViewer.offsetView(-dx, -dy);
if (fab!=null && GlobalUserPreferences.disableFabAutoHide) { if (fab!=null && GlobalUserPreferences.disableFabAutoHide) {
if (dy > 0 /*&& !isFirstLaunch*/) { if (dy > 0 && fab.getVisibility() == View.VISIBLE) {
if (isScrollingUp /*&& !isFirstLaunch*/) {
fab.setVisibility(View.INVISIBLE);
TranslateAnimation animate = new TranslateAnimation( TranslateAnimation animate = new TranslateAnimation(
0, 0,
0, 0,
@ -297,10 +295,10 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
animate.setDuration(300); animate.setDuration(300);
animate.setFillAfter(true); animate.setFillAfter(true);
fab.startAnimation(animate); fab.startAnimation(animate);
isScrollingUp = false; fab.setVisibility(View.INVISIBLE);
} scrollDiff = 0;
} else { } else if (dy < 0 && fab.getVisibility() != View.VISIBLE) {
if (!isScrollingUp) { if (scrollDiff > 400) {
fab.setVisibility(View.VISIBLE); fab.setVisibility(View.VISIBLE);
TranslateAnimation animate = new TranslateAnimation( TranslateAnimation animate = new TranslateAnimation(
0, 0,
@ -310,7 +308,9 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
animate.setDuration(300); animate.setDuration(300);
animate.setFillAfter(true); animate.setFillAfter(true);
fab.startAnimation(animate); fab.startAnimation(animate);
isScrollingUp = true; scrollDiff = 0;
} else {
scrollDiff += Math.abs(dy);
} }
} }
} }

View file

@ -463,6 +463,29 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
}); });
scrollView.setOnScrollChangeListener(this::onScrollChanged); scrollView.setOnScrollChangeListener(this::onScrollChanged);
scrollView.setNestedScrollListener((target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed) -> {
if (dyConsumed > 0) {
fab.setVisibility(View.INVISIBLE);
TranslateAnimation animate = new TranslateAnimation(
0,
0,
0,
fab.getHeight() * 2);
animate.setDuration(300);
animate.setFillAfter(true);
fab.startAnimation(animate);
} else {
fab.setVisibility(View.VISIBLE);
TranslateAnimation animate = new TranslateAnimation(
0,
0,
fab.getHeight() * 2,
0);
animate.setDuration(300);
animate.setFillAfter(true);
fab.startAnimation(animate);
}
});
titleTransY=getToolbar().getLayoutParams().height; titleTransY=getToolbar().getLayoutParams().height;
if(toolbarTitleView!=null){ if(toolbarTitleView!=null){
toolbarTitleView.setTranslationY(titleTransY); toolbarTitleView.setTranslationY(titleTransY);

View file

@ -10,7 +10,12 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
public class NestedRecyclerScrollView extends CustomScrollView{ public class NestedRecyclerScrollView extends CustomScrollView{
public interface NestedScrollListener{
public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed);
}
private Supplier<RecyclerView> scrollableChildSupplier; private Supplier<RecyclerView> scrollableChildSupplier;
private NestedScrollListener nestedScrollListener;
public NestedRecyclerScrollView(Context context){ public NestedRecyclerScrollView(Context context){
super(context); super(context);
@ -24,6 +29,18 @@ public class NestedRecyclerScrollView extends CustomScrollView{
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
} }
@Override
public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (nestedScrollListener != null) {
nestedScrollListener.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
}
}
public void setNestedScrollListener(NestedScrollListener listener) {
this.nestedScrollListener = listener;
}
@Override @Override
public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) { public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {
final RecyclerView rv = (RecyclerView) target; final RecyclerView rv = (RecyclerView) target;