AppBar 滚动行为
AppBar Scrolling Behavior
我们有 app:layout_behavior="@string/appbar_scrolling_view_behavior";它非常适合工具栏。
我创建自定义 BottomBar 并想反转导致此标志的移动方向。
有什么实现方法吗?
我找到了解决方案!
我们需要像这样扩展 CoordinatorLayout.Behavior
public class BottomBarBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
private int defaultDependencyTop = -1;
public BottomBarBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) {
return dependency instanceof AppBarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) {
if (defaultDependencyTop == -1) {
defaultDependencyTop = dependency.getTop();
}
child.setTranslationY(-dependency.getTop() + defaultDependencyTop);
return true;
}
}
Eduard Poida 如果在隐藏底部导航的情况下更改 phone 的方向,您的解决方案将无法正常工作。Screenshot
我已经修改了你的解决方案的一行,它对我来说效果更好:
public class BottomNavigationBehavior<V extends View> extends CoordinatorLayout.Behavior<V>
{
private int defaultDependencyTop = -1;
public BottomNavigationBehavior(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency)
{
return dependency instanceof AppBarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency)
{
if (defaultDependencyTop == -1)
{
defaultDependencyTop = dependency.getTop();
}
child.setTranslationY(-dependency.getTop()*2);
return true;
}
}
我们有 app:layout_behavior="@string/appbar_scrolling_view_behavior";它非常适合工具栏。 我创建自定义 BottomBar 并想反转导致此标志的移动方向。 有什么实现方法吗?
我找到了解决方案!
我们需要像这样扩展 CoordinatorLayout.Behavior
public class BottomBarBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
private int defaultDependencyTop = -1;
public BottomBarBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) {
return dependency instanceof AppBarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) {
if (defaultDependencyTop == -1) {
defaultDependencyTop = dependency.getTop();
}
child.setTranslationY(-dependency.getTop() + defaultDependencyTop);
return true;
}
}
Eduard Poida 如果在隐藏底部导航的情况下更改 phone 的方向,您的解决方案将无法正常工作。Screenshot
我已经修改了你的解决方案的一行,它对我来说效果更好:
public class BottomNavigationBehavior<V extends View> extends CoordinatorLayout.Behavior<V>
{
private int defaultDependencyTop = -1;
public BottomNavigationBehavior(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency)
{
return dependency instanceof AppBarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency)
{
if (defaultDependencyTop == -1)
{
defaultDependencyTop = dependency.getTop();
}
child.setTranslationY(-dependency.getTop()*2);
return true;
}
}