summaryrefslogtreecommitdiff
path: root/library/main/src/com/android/setupwizardlib/view/StickyHeaderScrollView.java
diff options
context:
space:
mode:
Diffstat (limited to 'library/main/src/com/android/setupwizardlib/view/StickyHeaderScrollView.java')
-rw-r--r--library/main/src/com/android/setupwizardlib/view/StickyHeaderScrollView.java125
1 files changed, 63 insertions, 62 deletions
diff --git a/library/main/src/com/android/setupwizardlib/view/StickyHeaderScrollView.java b/library/main/src/com/android/setupwizardlib/view/StickyHeaderScrollView.java
index ca47446..9fd7b0c 100644
--- a/library/main/src/com/android/setupwizardlib/view/StickyHeaderScrollView.java
+++ b/library/main/src/com/android/setupwizardlib/view/StickyHeaderScrollView.java
@@ -30,12 +30,13 @@ import android.view.WindowInsets;
* drawn when the sticky element hits the top of the view.
*
* <p>There are a few things to note:
+ *
* <ol>
* <li>The two supported scenarios are StickyHeaderScrollView -> subview (stickyContainer) ->
- * sticky, and StickyHeaderScrollView -> container -> subview (sticky).
- * The arrow (->) represents parent/child relationship and must be immediate child.
+ * sticky, and StickyHeaderScrollView -> container -> subview (sticky). The arrow (->)
+ * represents parent/child relationship and must be immediate child.
* <li>If fitsSystemWindows is true, then this will offset the sticking position by the height of
- * the system decorations at the top of the screen.
+ * the system decorations at the top of the screen.
* <li>For versions before Honeycomb, this will behave like a regular ScrollView.
* </ol>
*
@@ -43,75 +44,75 @@ import android.view.WindowInsets;
*/
public class StickyHeaderScrollView extends BottomScrollView {
- private View mSticky;
- private View mStickyContainer;
- private int mStatusBarInset = 0;
+ private View sticky;
+ private View stickyContainer;
+ private int statusBarInset = 0;
- public StickyHeaderScrollView(Context context) {
- super(context);
- }
+ public StickyHeaderScrollView(Context context) {
+ super(context);
+ }
- public StickyHeaderScrollView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
+ public StickyHeaderScrollView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
- public StickyHeaderScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
+ public StickyHeaderScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- super.onLayout(changed, l, t, r, b);
- if (mSticky == null) {
- updateStickyView();
- }
- updateStickyHeaderPosition();
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
+ if (sticky == null) {
+ updateStickyView();
}
+ updateStickyHeaderPosition();
+ }
- public void updateStickyView() {
- mSticky = findViewWithTag("sticky");
- mStickyContainer = findViewWithTag("stickyContainer");
- }
+ public void updateStickyView() {
+ sticky = findViewWithTag("sticky");
+ stickyContainer = findViewWithTag("stickyContainer");
+ }
- private void updateStickyHeaderPosition() {
- // Note: for pre-Honeycomb the header will not be moved, so this ScrollView essentially
- // behaves like a normal BottomScrollView.
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- if (mSticky != null) {
- // The view to draw when sticking to the top
- final View drawTarget = mStickyContainer != null ? mStickyContainer : mSticky;
- // The offset to draw the view at when sticky
- final int drawOffset = mStickyContainer != null ? mSticky.getTop() : 0;
- // Position of the draw target, relative to the outside of the scrollView
- final int drawTop = drawTarget.getTop() - getScrollY();
- if (drawTop + drawOffset < mStatusBarInset || !drawTarget.isShown()) {
- // ScrollView translates the whole canvas so we have to compensate for that
- drawTarget.setTranslationY(getScrollY() - drawOffset);
- } else {
- drawTarget.setTranslationY(0);
- }
- }
+ private void updateStickyHeaderPosition() {
+ // Note: for pre-Honeycomb the header will not be moved, so this ScrollView essentially
+ // behaves like a normal BottomScrollView.
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ if (sticky != null) {
+ // The view to draw when sticking to the top
+ final View drawTarget = stickyContainer != null ? stickyContainer : sticky;
+ // The offset to draw the view at when sticky
+ final int drawOffset = stickyContainer != null ? sticky.getTop() : 0;
+ // Position of the draw target, relative to the outside of the scrollView
+ final int drawTop = drawTarget.getTop() - getScrollY();
+ if (drawTop + drawOffset < statusBarInset || !drawTarget.isShown()) {
+ // ScrollView translates the whole canvas so we have to compensate for that
+ drawTarget.setTranslationY(getScrollY() - drawOffset);
+ } else {
+ drawTarget.setTranslationY(0);
}
+ }
}
+ }
- @Override
- protected void onScrollChanged(int l, int t, int oldl, int oldt) {
- super.onScrollChanged(l, t, oldl, oldt);
- updateStickyHeaderPosition();
- }
+ @Override
+ protected void onScrollChanged(int l, int t, int oldl, int oldt) {
+ super.onScrollChanged(l, t, oldl, oldt);
+ updateStickyHeaderPosition();
+ }
- @Override
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- public WindowInsets onApplyWindowInsets(WindowInsets insets) {
- if (getFitsSystemWindows()) {
- mStatusBarInset = insets.getSystemWindowInsetTop();
- insets = insets.replaceSystemWindowInsets(
- insets.getSystemWindowInsetLeft(),
- 0, /* top */
- insets.getSystemWindowInsetRight(),
- insets.getSystemWindowInsetBottom()
- );
- }
- return insets;
+ @Override
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ if (getFitsSystemWindows()) {
+ statusBarInset = insets.getSystemWindowInsetTop();
+ insets =
+ insets.replaceSystemWindowInsets(
+ insets.getSystemWindowInsetLeft(),
+ 0, /* top */
+ insets.getSystemWindowInsetRight(),
+ insets.getSystemWindowInsetBottom());
}
+ return insets;
+ }
}