Android 使用折叠工具栏布局时更改浮动按钮的行为
我正在开发一个应用程序,其中我有一个带有Android 使用折叠工具栏布局时更改浮动按钮的行为,android,behavior,android-collapsingtoolbarlayout,Android,Behavior,Android Collapsingtoolbarlayout,我正在开发一个应用程序,其中我有一个带有折叠工具栏布局的页面,以及一个图像视图(用户图片)来代替浮动操作按钮 默认行为是在折叠工具栏布局完全隐藏时隐藏图像,但我需要不同的行为: 我希望当用户向上滚动页面时,图像会继续移动,但速度很慢。因此,当它完全隐藏时,图像会显示在工具栏下方,如下所示(这只是一个更好理解的示例): 之前: 之后: 有没有办法做到这一点?您需要扩展CoordinatorLayout.Behavior并覆盖方法onDependentViewChanged上的行为 public
折叠工具栏布局
的页面,以及一个图像视图
(用户图片)来代替浮动操作按钮
默认行为是在折叠工具栏布局
完全隐藏时隐藏图像,但我需要不同的行为:
我希望当用户向上滚动页面时,图像会继续移动,但速度很慢。因此,当它完全隐藏时,图像会显示在工具栏下方,如下所示(这只是一个更好理解的示例):
之前:
之后:
有没有办法做到这一点?您需要扩展
CoordinatorLayout.Behavior
并覆盖方法onDependentViewChanged
上的行为
public class ScrollingFABBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
private int toolbarHeight;
public ScrollingFABBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
this.toolbarHeight = GenericUtils.getActionBarHeight(context);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
return dependency instanceof AppBarLayout || dependency instanceof Snackbar.SnackbarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
if (dependency instanceof AppBarLayout) {
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
int fabBottomMargin = lp.bottomMargin;
int distanceToScroll = fab.getHeight() + fabBottomMargin;
float ratio = dependency.getY() / (float) toolbarHeight;
fab.setTranslationY(-distanceToScroll * ratio);
return true;
}
if (dependency instanceof Snackbar.SnackbarLayout) {
float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
fab.setTranslationY(translationY);
return true;
}
return false;
}
}
公共类ScrollingFABBehavior扩展了CoordinatorLayout.Behavior{
私家车高度;
公共滚动行为(上下文、属性集属性){
超级(上下文,attrs);
this.toolbarHeight=GenericUtils.getActionBarHeight(上下文);
}
@凌驾
公共布尔布局依赖项(坐标布局父项、浮动操作按钮fab、视图依赖项){
返回AppBarLayout的依赖项实例| | Snackbar.SnackbarLayout的依赖项实例;
}
@凌驾
公共布尔onDependentViewChanged(CoordinatorLayout父级、FloatingActionButton fab、视图依赖项){
if(AppBarLayout的依赖项实例){
CoordinatorLayout.LayoutParams lp=(CoordinatorLayout.LayoutParams)fab.getLayoutParams();
int fabBottomMargin=lp.bottomMargin;
int distancetoscoll=fab.getHeight()+fabBottomMargin;
浮动比率=dependency.getY()/(float)工具栏高度;
工厂设置平移Y(-DistanceToCroll*比率);
返回true;
}
if(Snackbar.Snackbar布局的依赖项实例){
float translationY=Math.min(0,dependency.getTranslationY()-dependency.getHeight());
工厂设置转换Y(转换Y);
返回true;
}
返回false;
}
}
您可以在此处查看一个开源应用程序的示例:我做了一些更改,以应用于ImageView而不是FloatingActionButton,并通过此处找到的代码获得了toolbarHeight:并且工作得非常出色!!非常感谢