refactor(compose-fab): show fab after small scroll distance
This commit is contained in:
parent
6cf8793efe
commit
ececa7aa2f
4 changed files with 59 additions and 19 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue