2015-11-26 11 views
0

Я разрабатываю приложение, где у меня есть страница с CollapsingToolbarLayout и ImageView (изображение пользователя) вместо FloatingActionButton.Изменение поведения FloatingButton при использовании CollapsingToolbarLayout

Поведение по умолчанию скрывает изображение, когда CollapsingToolbarLayout полностью спрятано, но мне нужно другое поведение: Мне бы хотелось, чтобы пользователь, прокручивая страницу, продолжал движение, но медленно. Так что, когда он полностью скрыт, изображение появляется под панелью инструментов, как это (просто пример для лучшего uderstanding):

перед: enter image description here

после: enter image description here

есть способ сделать это?

ответ

1

Необходимо удлинить CoordinatorLayout.Behavior<FloatingActionButton> и переопределить поведение метода 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; 
    } 

} 

Вы можете проверить пример исходного приложения открытого здесь: https://github.com/nowsecure/android-vts/blob/master/app/src/main/java/fuzion24/device/vulnerability/test/ScrollingFABBehavior.java

+1

Я сделал некоторые изменения, которые будут применены к ImageView и не FloatingActionButton, и получил toolbarHeight через код здесь: HTTP: // StackOverflow .com/questions/7165830/what-is-the-size-of-actionbar-in-pixels и работает как шарм !! большое спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^