Java Code Examples for android.support.v4.view.ViewCompat#getMinimumHeight()
The following examples show how to use
android.support.v4.view.ViewCompat#getMinimumHeight() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: GpCollapsingToolbar.java From GpCollapsingToolbar with Apache License 2.0 | 6 votes |
/** * Returns the amount of visible height in pixels used to define when to trigger a scrim * visibility change. * */ public int getScrimVisibleHeightTrigger() { if (mScrimVisibleHeightTrigger >= 0) { // If we have one explictly set, return it return mScrimVisibleHeightTrigger; } // Otherwise we'll use the default computed value final int insetTop = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0; final int minHeight = ViewCompat.getMinimumHeight(this); if (minHeight > 0) { // If we have a minHeight set, lets use 2 * minHeight (capped at our height) return Math.min((minHeight * 2) + insetTop, getHeight()); } // If we reach here then we don't have a min height set. Instead we'll take a // guess at 1/3 of our height being visible return getHeight() / 3; }
Example 2
Source File: AppBarLayout.java From ticdesign with Apache License 2.0 | 6 votes |
private void snapToChildIfNeeded(CoordinatorLayout coordinatorLayout, AppBarLayout abl) { final int offset = getTopBottomOffsetForScrollingSibling(); final View offsetChild = getChildOnOffset(abl, offset); if (offsetChild != null) { final LayoutParams lp = (LayoutParams) offsetChild.getLayoutParams(); if ((lp.getScrollFlags() & LayoutParams.FLAG_SNAP) == LayoutParams.FLAG_SNAP) { // We're set the snap, so animate the offset to the nearest edge int childTop = -offsetChild.getTop(); int childBottom = -offsetChild.getBottom(); // If the view is set only exit until it is collapsed, we'll abide by that if ((lp.getScrollFlags() & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) == LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) { childBottom += ViewCompat.getMinimumHeight(offsetChild); } final int newOffset = offset < (childBottom + childTop) / 2 ? childBottom : childTop; animateOffsetTo(coordinatorLayout, abl, MathUtils.constrain(newOffset, -abl.getTotalScrollRange(), 0)); } } }
Example 3
Source File: AppBarLayout.java From ticdesign with Apache License 2.0 | 6 votes |
@Override public Parcelable onSaveInstanceState(CoordinatorLayout parent, AppBarLayout appBarLayout) { final Parcelable superState = super.onSaveInstanceState(parent, appBarLayout); final int offset = getTopAndBottomOffset(); // Try and find the first visible child... for (int i = 0, count = appBarLayout.getChildCount(); i < count; i++) { View child = appBarLayout.getChildAt(i); final int visBottom = child.getBottom() + offset; if (child.getTop() + offset <= 0 && visBottom >= 0) { final SavedState ss = new SavedState(superState); ss.firstVisibleChildIndex = i; ss.firstVisibileChildAtMinimumHeight = visBottom == ViewCompat.getMinimumHeight(child); ss.firstVisibileChildPercentageShown = visBottom / (float) child.getHeight(); return ss; } } // Else we'll just return the super state return superState; }
Example 4
Source File: SmoothAppBarLayout.java From Expert-Android-Programming with MIT License | 5 votes |
private int getMinHeight(AppBarLayout layout, boolean forceQuickReturn) { int minHeight = ViewCompat.getMinimumHeight(layout); if (mScrollFlag.isFlagExitUntilCollapsedEnabled() || (minHeight > 0 && !mScrollFlag.isQuickReturnEnabled()) || forceQuickReturn) { return minHeight > 0 ? minHeight : ViewCompat.getMinimumHeight(mScrollFlag.getView()); } return 0; }
Example 5
Source File: StretchingLayout.java From ticdesign with Apache License 2.0 | 5 votes |
@Override public void onOffsetChanged(AppBarLayout layout, int verticalOffset) { mCurrentOffset = verticalOffset; final int insetTop = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0; final int scrollRange = layout.getTotalScrollRange(); for (int i = 0, z = getChildCount(); i < z; i++) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final ViewOffsetHelper offsetHelper = getViewOffsetHelper(child); switch (lp.mCollapseMode) { case LayoutParams.COLLAPSE_MODE_PIN: if (getHeight() - insetTop + verticalOffset >= child.getHeight()) { offsetHelper.setTopAndBottomOffset(-verticalOffset); } break; case LayoutParams.COLLAPSE_MODE_PARALLAX: offsetHelper.setTopAndBottomOffset( Math.round(-verticalOffset * lp.mParallaxMult)); break; } } // Update the collapsing text's fraction final int expandRange = getHeight() - ViewCompat.getMinimumHeight( StretchingLayout.this) - insetTop; mCollapsingTextHelper.setExpansionFraction( Math.abs(verticalOffset) / (float) expandRange); if (Math.abs(verticalOffset) == scrollRange) { // If we have some pinned children, and we're offset to only show those views, // we want to be elevate ViewCompat.setElevation(layout, layout.getTargetElevation()); } else { // Otherwise, we're inline with the content ViewCompat.setElevation(layout, 0f); } }
Example 6
Source File: AppBarLayout.java From ticdesign with Apache License 2.0 | 5 votes |
/** * Returns the scroll range of all children. * * @return the scroll range in px */ public final int getTotalScrollRange() { if (mTotalScrollRange != INVALID_SCROLL_RANGE) { return mTotalScrollRange; } int range = 0; int currentTop = getTop(); boolean allScroll = true; for (int i = 0, z = getChildCount(); i < z; i++) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final int childBottom = getTop() + child.getBottom(); final int flags = lp.mScrollFlags; if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) { // We're set to scroll so add the child's height range += childBottom - currentTop; currentTop = childBottom; if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) { // For a collapsing scroll, we to take the collapsed height into account. // We also break straight away since later views can't scroll beneath // us range -= ViewCompat.getMinimumHeight(child); allScroll = false; break; } } else { allScroll = false; // As soon as a view doesn't have the scroll flag, we end the range calculation. // This is because views below can not scroll under a fixed view. break; } } if (allScroll) { range += getBottom() - currentTop; } return mTotalScrollRange = Math.max(0, range - getTopInset()); }
Example 7
Source File: AppBarLayout.java From ticdesign with Apache License 2.0 | 5 votes |
final int getMinimumHeightForVisibleOverlappingContent() { final int topInset = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0; final int minHeight = ViewCompat.getMinimumHeight(this); if (minHeight != 0) { // If this layout has a min height, use it (doubled) return (minHeight * 2) + topInset; } // Otherwise, we'll use twice the min height of our last child final int childCount = getChildCount(); return childCount >= 1 ? (ViewCompat.getMinimumHeight(getChildAt(childCount - 1)) * 2) + topInset : 0; }
Example 8
Source File: SmoothAppBarLayout.java From smooth-app-bar-layout with Apache License 2.0 | 5 votes |
private int getMinHeight(AppBarLayout layout, boolean forceQuickReturn) { int minHeight = ViewCompat.getMinimumHeight(layout); if (mScrollFlag.isFlagExitUntilCollapsedEnabled() || (minHeight > 0 && !mScrollFlag.isQuickReturnEnabled()) || forceQuickReturn) { return minHeight > 0 ? minHeight : ViewCompat.getMinimumHeight(mScrollFlag.getView()); } return 0; }
Example 9
Source File: GpCollapsingToolbar.java From GpCollapsingToolbar with Apache License 2.0 | 4 votes |
@Override public void onOffsetChanged(AppBarLayout layout, int verticalOffset) { mCurrentOffset = verticalOffset; final int insetTop = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0; final int scrollRange = layout.getTotalScrollRange(); int height = 0; for (int i = 0, z = getChildCount(); i < z; i++) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final ViewOffsetHelper offsetHelper = getViewOffsetHelper(child); if (child instanceof Toolbar) { height = child.getHeight(); } switch (lp.mCollapseMode) { case LayoutParams.COLLAPSE_MODE_PIN: if (getHeight() - insetTop + verticalOffset >= child.getHeight()) { offsetHelper.setTopAndBottomOffset(-verticalOffset); } break; case LayoutParams.COLLAPSE_MODE_PARALLAX: offsetHelper.setTopAndBottomOffset( Math.round(-verticalOffset * lp.mParallaxMult)); break; } } // Show or hide the scrims if needed if (mContentScrim != null || mStatusBarScrim != null) { if (mGooglePlayBehaviour) { processLikeGooglePlayBehaviour(height, verticalOffset, scrollRange); } else { updateScrimVisibility(); } } if (mStatusBarScrim != null && insetTop > 0) { ViewCompat.postInvalidateOnAnimation(GpCollapsingToolbar.this); } // Update the collapsing text's fraction final int expandRange = getHeight() - ViewCompat.getMinimumHeight(GpCollapsingToolbar.this) - insetTop; /*Log.e("LOG", "offset = " + verticalOffset + "; height = " + height + "; isTransparent = " + scrollRange + "; scrollRange = " + scrollRange);// + "; expandRange = " + expandRange);*/ mCollapsingTextHelper.setExpansionFraction(Math.abs(verticalOffset) / (float) expandRange); }
Example 10
Source File: AppBarLayout.java From ticdesign with Apache License 2.0 | 4 votes |
private int getDownNestedPreScrollRange(boolean consumePreScroll) { if (consumePreScroll != mShouldConsumePreScroll) { mDownPreScrollRange = INVALID_SCROLL_RANGE; mShouldConsumePreScroll = consumePreScroll; } if (mDownPreScrollRange != INVALID_SCROLL_RANGE) { // If we already have a valid value, return it return mDownPreScrollRange; } int range = 0; int currentBottom = getBottom(); boolean allScroll = true; for (int i = getChildCount() - 1; i >= 0; i--) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final int flags = lp.mScrollFlags; if (consumePreScroll || (flags & LayoutParams.FLAG_QUICK_RETURN) == LayoutParams.FLAG_QUICK_RETURN) { final int childTop = getTop() + child.getTop() - lp.topMargin; // First take the margin into account // The view has the quick return flag combination... if ((flags & LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED) != 0) { // If they're set to enter collapsed, use the minimum height int collapsedTop = getTop() + child.getBottom() - ViewCompat.getMinimumHeight(child); range += currentBottom - collapsedTop; } else { // Else use the full height range += currentBottom - childTop; } currentBottom = childTop; } else if (range > 0) { // If we've hit an non-quick return scrollable view, and we've already hit a // quick return view, return now allScroll = false; break; } else { allScroll = false; } } if (allScroll) { range += currentBottom - getTop(); } return mDownPreScrollRange = range; }
Example 11
Source File: AppBarLayout.java From ticdesign with Apache License 2.0 | 4 votes |
/** * Return the scroll range when scrolling down from a nested scroll. */ private int getDownNestedScrollRange() { if (mDownScrollRange != INVALID_SCROLL_RANGE) { // If we already have a valid value, return it return mDownScrollRange; } int range = 0; int currentTop = getTop(); boolean allScroll = true; for (int i = 0, z = getChildCount(); i < z; i++) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final int childBottom = getTop() + child.getBottom(); final int flags = lp.mScrollFlags; if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) { // We're set to scroll so add the child's height range += childBottom - currentTop; currentTop = childBottom; if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) { // For a collapsing exit scroll, we to take the collapsed height into account. // We also break the range straight away since later views can't scroll // beneath us range -= ViewCompat.getMinimumHeight(child) + getTopInset(); allScroll = false; break; } } else { // As soon as a view doesn't have the scroll flag, we end the range calculation. // This is because views below can not scroll under a fixed view. allScroll = false; break; } } if (allScroll) { range += getBottom() - currentTop; } return mDownScrollRange = Math.max(0, range); }
Example 12
Source File: AppBarLayout.java From ticdesign with Apache License 2.0 | 4 votes |
private int interpolateOffset(AppBarLayout layout, final int offset) { final int absOffset = Math.abs(offset); for (int i = 0, z = layout.getChildCount(); i < z; i++) { final View child = layout.getChildAt(i); final AppBarLayout.LayoutParams childLp = (LayoutParams) child.getLayoutParams(); final Interpolator interpolator = childLp.getScrollInterpolator(); if (absOffset >= child.getTop() && absOffset <= child.getBottom()) { if (interpolator != null) { int childScrollableHeight = 0; final int flags = childLp.getScrollFlags(); if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) { // We're set to scroll so add the child's height plus margin childScrollableHeight += child.getHeight() + childLp.topMargin + childLp.bottomMargin; if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) { // For a collapsing scroll, we to take the collapsed height // into account. childScrollableHeight -= ViewCompat.getMinimumHeight(child); } } if (ViewCompat.getFitsSystemWindows(child)) { childScrollableHeight -= layout.getTopInset(); } if (childScrollableHeight > 0) { final int offsetForView = absOffset - child.getTop(); final int interpolatedDiff = Math.round(childScrollableHeight * interpolator.getInterpolation( offsetForView / (float) childScrollableHeight)); return Integer.signum(offset) * (child.getTop() + interpolatedDiff); } } // If we get to here then the view on the offset isn't suitable for interpolated // scrolling. So break out of the loop break; } } return offset; }
Example 13
Source File: CollapsingToolbarLayout.java From ticdesign with Apache License 2.0 | 4 votes |
/** * The additional offset used to define when to trigger the scrim visibility change. */ final int getScrimTriggerOffset() { return 2 * ViewCompat.getMinimumHeight(this); }
Example 14
Source File: CollapsingToolbarLayout.java From ticdesign with Apache License 2.0 | 4 votes |
@Override public void onOffsetChanged(AppBarLayout layout, int verticalOffset) { mCurrentOffset = verticalOffset; final int insetTop = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0; final int scrollRange = layout.getTotalScrollRange(); for (int i = 0, z = getChildCount(); i < z; i++) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final ViewOffsetHelper offsetHelper = getViewOffsetHelper(child); switch (lp.mCollapseMode) { case LayoutParams.COLLAPSE_MODE_PIN: if (getHeight() - insetTop + verticalOffset >= child.getHeight()) { offsetHelper.setTopAndBottomOffset(-verticalOffset); } break; case LayoutParams.COLLAPSE_MODE_PARALLAX: offsetHelper.setTopAndBottomOffset( Math.round(-verticalOffset * lp.mParallaxMult)); break; } } // Show or hide the scrims if needed if (mContentScrim != null || mStatusBarScrim != null) { setScrimsShown(getHeight() + verticalOffset < getScrimTriggerOffset() + insetTop); } if (mStatusBarScrim != null && insetTop > 0) { ViewCompat.postInvalidateOnAnimation(CollapsingToolbarLayout.this); } // Update the collapsing text's fraction final int expandRange = getHeight() - ViewCompat.getMinimumHeight( CollapsingToolbarLayout.this) - insetTop; mCollapsingTextHelper.setExpansionFraction( Math.abs(verticalOffset) / (float) expandRange); if (Math.abs(verticalOffset) == scrollRange) { // If we have some pinned children, and we're offset to only show those views, // we want to be elevate ViewCompat.setElevation(layout, layout.getTargetElevation()); } else { // Otherwise, we're inline with the content ViewCompat.setElevation(layout, 0f); } }
Example 15
Source File: FlexibleToolbarLayout.java From AppCompat-Extension-Library with Apache License 2.0 | 4 votes |
/** * The additional offset used to define when to trigger the scrim visibility change. */ final int getScrimTriggerOffset() { return 2 * ViewCompat.getMinimumHeight(this); }
Example 16
Source File: FlexibleToolbarLayout.java From AppCompat-Extension-Library with Apache License 2.0 | 4 votes |
@Override public void onOffsetChanged(AppBarLayout layout, int verticalOffset) { mCurrentOffset = verticalOffset; final int insetTop = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0; final int scrollRange = layout.getTotalScrollRange(); for (int i = 0, z = getChildCount(); i < z; i++) { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final ViewOffsetHelper offsetHelper = getViewOffsetHelper(child); switch (lp.mCollapseMode) { case LayoutParams.COLLAPSE_MODE_PIN: if (getHeight() - insetTop + verticalOffset >= child.getHeight()) { offsetHelper.setTopAndBottomOffset(-verticalOffset); } break; case LayoutParams.COLLAPSE_MODE_PARALLAX: offsetHelper.setTopAndBottomOffset( Math.round(-verticalOffset * lp.mParallaxMult)); break; } } // Show or hide the scrims if needed if (mContentScrim != null || mStatusBarScrim != null) { setScrimsShown(getHeight() + verticalOffset < getScrimTriggerOffset() + insetTop); } if (mStatusBarScrim != null && insetTop > 0) { ViewCompat.postInvalidateOnAnimation(FlexibleToolbarLayout.this); } // Update the collapsing text's fraction final int expandRange = getHeight() - ViewCompat.getMinimumHeight( FlexibleToolbarLayout.this) - insetTop; float fraction = Math.abs(verticalOffset) / (float) expandRange; mTitleCollapsingTextHelper.setExpansionFraction(fraction); mSubtitleCollapsingTextHelper.setExpansionFraction(fraction); mIconCollapsingHelper.setExpansionFraction(fraction); }