Guest User

Untitled

a guest
Mar 19th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.design.widget.CoordinatorLayout
  3. ...>
  4. <android.support.design.widget.AppBarLayout
  5. ...>
  6. <android.support.design.widget.CollapsingToolbarLayout
  7. ...>
  8. <android.support.v7.widget.Toolbar
  9. .../>
  10. </android.support.design.widget.CollapsingToolbarLayout>
  11. </android.support.design.widget.AppBarLayout>
  12.  
  13. <include layout="@layout/content_scrolling"/>
  14.  
  15. <Button
  16. android:id="@+id/my_button"
  17. android:layout_width="match_parent"
  18. android:layout_height="40dp"
  19. android:text="my sticky button"
  20. android:background="#ff0000"
  21. android:layout_gravity="center_horizontal"
  22. app:layout_anchor="@id/anchor"
  23. app:layout_anchorGravity="top"/>
  24.  
  25. <android.support.design.widget.FloatingActionButton
  26. .../>
  27.  
  28. </android.support.design.widget.CoordinatorLayout>
  29.  
  30. <?xml version="1.0" encoding="utf-8"?>
  31.  
  32. <LinearLayout
  33. android:layout_width="match_parent"
  34. android:layout_height="wrap_content"
  35. android:orientation="vertical">
  36.  
  37. <TextView
  38. android:layout_width="match_parent"
  39. android:layout_height="1000dp"
  40. .../>
  41.  
  42. <View
  43. android:id="@+id/anchor"
  44. android:layout_height="40dp"
  45. android:layout_width="match_parent"/>
  46. <TextView
  47. android:layout_width="match_parent"
  48. android:layout_height="200dp"
  49. .../>
  50. </LinearLayout>
  51.  
  52. public class StickyBottomBehavior extends CoordinatorLayout.Behavior {
  53. private Integer mInitialMargin = 100;
  54.  
  55. @Override
  56. public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull
  57. View child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
  58. return (axes == SCROLL_AXIS_VERTICAL);
  59. }
  60.  
  61. @Override
  62. public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull View
  63. child, @NonNull View target, int dx, int dy, @NonNull int[] consumed, int type) {
  64. super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
  65.  
  66. updateMargin(coordinatorLayout, child);
  67. }
  68.  
  69. private void updateMargin(CoordinatorLayout coordinatorLayout, View child) {
  70.  
  71. int coordBottom = coordinatorLayout.getBottom();
  72.  
  73. //Get anchored View to know its position
  74. int id = ((CoordinatorLayout.LayoutParams) child.getLayoutParams()).getAnchorId();
  75. View anchor = coordinatorLayout.findViewById(id);
  76. int[] anchorLocation = new int[2];
  77. anchor.getLocationInWindow(anchorLocation);
  78.  
  79. int diff = Math.max(coordBottom - anchorLocation[1], 0);
  80.  
  81. //add margins according to how close the child is from the bottom
  82. ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) child.getLayoutParams();
  83. layoutParams.leftMargin = Math.min(diff/2, mInitialMargin);
  84. layoutParams.rightMargin = Math.min(diff/2, mInitialMargin);
  85. child.setLayoutParams(layoutParams);
  86. }
Add Comment
Please, Sign In to add comment