androidx.core.math.MathUtils Java Examples
The following examples show how to use
androidx.core.math.MathUtils.
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: HeaderBehavior.java From material-components-android with Apache License 2.0 | 6 votes |
int setHeaderTopBottomOffset( CoordinatorLayout parent, V header, int newOffset, int minOffset, int maxOffset) { final int curOffset = getTopAndBottomOffset(); int consumed = 0; if (minOffset != 0 && curOffset >= minOffset && curOffset <= maxOffset) { // If we have some scrolling range, and we're currently within the min and max // offsets, calculate a new offset newOffset = MathUtils.clamp(newOffset, minOffset, maxOffset); if (curOffset != newOffset) { setTopAndBottomOffset(newOffset); // Update how much dy we have consumed consumed = curOffset - newOffset; } } return consumed; }
Example #2
Source File: TextInputTimePickerView.java From DateTimePicker with Apache License 2.0 | 6 votes |
private boolean parseAndSetHourInternal(String input) { try { final int hour = Integer.parseInt(input); if (!isValidLocalizedHour(hour)) { final int minHour = mHourFormatStartsAtZero ? 0 : 1; final int maxHour = mIs24Hour ? 23 : 11 + minHour; mListener.onValueChanged(HOURS, getHourOfDayFromLocalizedHour( MathUtils.clamp(hour, minHour, maxHour))); return false; } mListener.onValueChanged(HOURS, getHourOfDayFromLocalizedHour(hour)); return true; } catch (NumberFormatException e) { // Do nothing since we cannot parse the input. return false; } }
Example #3
Source File: TocFragment.java From material-components-android with Apache License 2.0 | 5 votes |
private int calculateGridSpanCount() { DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); int displayWidth = displayMetrics.widthPixels; int itemSize = getResources().getDimensionPixelSize(R.dimen.cat_toc_item_size); int gridSpanCount = displayWidth / itemSize; return MathUtils.clamp(gridSpanCount, GRID_SPAN_COUNT_MIN, GRID_SPAN_COUNT_MAX); }
Example #4
Source File: DragDropHelper.java From RecyclerViewExtensions with MIT License | 5 votes |
/** * Offsets the dragged view based on the touch position, clamping its location to the parent. */ private void handleTranslation(@NonNull RecyclerView.ViewHolder viewHolder, int startLeft, int startTop) { int width = viewHolder.itemView.getWidth(); int height = viewHolder.itemView.getHeight(); int maxLeft = mRecyclerView.getWidth() - width; int maxTop = mRecyclerView.getHeight() - height; int left = MathUtils.clamp(startLeft + (mTouchCurrentX - mTouchStartX), 0, maxLeft); int top = MathUtils.clamp(startTop + (mTouchCurrentY - mTouchStartY), 0, maxTop); setTranslation(viewHolder, left - viewHolder.itemView.getLeft(), top - viewHolder.itemView.getTop()); }
Example #5
Source File: CollapsingTextHelper.java From material-components-android with Apache License 2.0 | 5 votes |
/** * Set the value indicating the current scroll value. This decides how much of the background will * be displayed, as well as the title metrics/positioning. * * <p>A value of {@code 0.0} indicates that the layout is fully expanded. A value of {@code 1.0} * indicates that the layout is fully collapsed. */ public void setExpansionFraction(float fraction) { fraction = MathUtils.clamp(fraction, 0f, 1f); if (fraction != expandedFraction) { expandedFraction = fraction; calculateCurrentOffsets(); } }
Example #6
Source File: CollapsingToolbarLayout.java From material-components-android with Apache License 2.0 | 5 votes |
@Override public void onOffsetChanged(AppBarLayout layout, int verticalOffset) { currentOffset = verticalOffset; final int insetTop = lastInsets != null ? lastInsets.getSystemWindowInsetTop() : 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); switch (lp.collapseMode) { case LayoutParams.COLLAPSE_MODE_PIN: offsetHelper.setTopAndBottomOffset( MathUtils.clamp(-verticalOffset, 0, getMaxOffsetForPinChild(child))); break; case LayoutParams.COLLAPSE_MODE_PARALLAX: offsetHelper.setTopAndBottomOffset(Math.round(-verticalOffset * lp.parallaxMult)); break; default: break; } } // Show or hide the scrims if needed updateScrimVisibility(); if (statusBarScrim != null && insetTop > 0) { ViewCompat.postInvalidateOnAnimation(CollapsingToolbarLayout.this); } // Update the collapsing text's fraction final int expandRange = getHeight() - ViewCompat.getMinimumHeight(CollapsingToolbarLayout.this) - insetTop; collapsingTextHelper.setExpansionFraction(Math.abs(verticalOffset) / (float) expandRange); }
Example #7
Source File: AppBarLayout.java From material-components-android with Apache License 2.0 | 5 votes |
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // If we're set to handle system windows but our first child is not, we need to add some // height to ourselves to pad the first child down below the status bar final int heightMode = MeasureSpec.getMode(heightMeasureSpec); if (heightMode != MeasureSpec.EXACTLY && ViewCompat.getFitsSystemWindows(this) && shouldOffsetFirstChild()) { int newHeight = getMeasuredHeight(); switch (heightMode) { case MeasureSpec.AT_MOST: // For AT_MOST, we need to clamp our desired height with the max height newHeight = MathUtils.clamp( getMeasuredHeight() + getTopInset(), 0, MeasureSpec.getSize(heightMeasureSpec)); break; case MeasureSpec.UNSPECIFIED: // For UNSPECIFIED we can use any height so just add the top inset newHeight += getTopInset(); break; default: // fall out } setMeasuredDimension(getMeasuredWidth(), newHeight); } invalidateScrollRanges(); }
Example #8
Source File: RadialTimePickerView.java From DateTimePicker with Apache License 2.0 | 5 votes |
private void adjustPicker(int step) { final int stepSize; final int initialStep; final int maxValue; final int minValue; if (mShowHours) { stepSize = 1; final int currentHour24 = getCurrentHour(); if (mIs24HourMode) { initialStep = currentHour24; minValue = 0; maxValue = 23; } else { initialStep = hour24To12(currentHour24); minValue = 1; maxValue = 12; } } else { stepSize = 5; initialStep = getCurrentMinute() / stepSize; minValue = 0; maxValue = 55; } final int nextValue = (initialStep + step) * stepSize; final int clampedValue = MathUtils.clamp(nextValue, minValue, maxValue);//MathUtils.constrain(nextValue, minValue, maxValue); if (mShowHours) { setCurrentHour(clampedValue); } else { setCurrentMinute(clampedValue); } }
Example #9
Source File: TextInputTimePickerView.java From DateTimePicker with Apache License 2.0 | 5 votes |
private boolean parseAndSetMinuteInternal(String input) { try { final int minutes = Integer.parseInt(input); if (minutes < 0 || minutes > 59) { mListener.onValueChanged(MINUTES, MathUtils.clamp(minutes, 0, 59)); return false; } mListener.onValueChanged(MINUTES, minutes); return true; } catch (NumberFormatException e) { // Do nothing since we cannot parse the input. return false; } }
Example #10
Source File: SubtitleCollapsingTextHelper.java From collapsingtoolbarlayout-subtitle with Apache License 2.0 | 5 votes |
/** * Set the value indicating the current scroll value. This decides how much of the background will * be displayed, as well as the title metrics/positioning. * * <p>A value of {@code 0.0} indicates that the layout is fully expanded. A value of {@code 1.0} * indicates that the layout is fully collapsed. */ public void setExpansionFraction(float fraction) { fraction = MathUtils.clamp(fraction, 0f, 1f); if (fraction != expandedFraction) { expandedFraction = fraction; calculateCurrentOffsets(); } }
Example #11
Source File: SubtitleCollapsingToolbarLayout.java From collapsingtoolbarlayout-subtitle with Apache License 2.0 | 5 votes |
@Override public void onOffsetChanged(AppBarLayout layout, int verticalOffset) { currentOffset = verticalOffset; final int insetTop = lastInsets != null ? lastInsets.getSystemWindowInsetTop() : 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); switch (lp.collapseMode) { case LayoutParams.COLLAPSE_MODE_PIN: offsetHelper.setTopAndBottomOffset( MathUtils.clamp(-verticalOffset, 0, getMaxOffsetForPinChild(child))); break; case LayoutParams.COLLAPSE_MODE_PARALLAX: offsetHelper.setTopAndBottomOffset(Math.round(-verticalOffset * lp.parallaxMult)); break; default: break; } } // Show or hide the scrims if needed updateScrimVisibility(); if (statusBarScrim != null && insetTop > 0) { ViewCompat.postInvalidateOnAnimation(SubtitleCollapsingToolbarLayout.this); } // Update the collapsing text's fraction final int expandRange = getHeight() - ViewCompat.getMinimumHeight(SubtitleCollapsingToolbarLayout.this) - insetTop; collapsingTextHelper.setExpansionFraction(Math.abs(verticalOffset) / (float) expandRange); }
Example #12
Source File: FastScroller.java From AndroidFastScroll with Apache License 2.0 | 4 votes |
private void onPreDraw() { updateScrollbarState(); mTrackView.setVisibility(mScrollbarEnabled ? View.VISIBLE : View.INVISIBLE); mThumbView.setVisibility(mScrollbarEnabled ? View.VISIBLE : View.INVISIBLE); if (!mScrollbarEnabled) { mPopupView.setVisibility(View.INVISIBLE); return; } int layoutDirection = mView.getLayoutDirection(); mTrackView.setLayoutDirection(layoutDirection); mThumbView.setLayoutDirection(layoutDirection); mPopupView.setLayoutDirection(layoutDirection); boolean isLayoutRtl = layoutDirection == View.LAYOUT_DIRECTION_RTL; int viewWidth = mView.getWidth(); int viewHeight = mView.getHeight(); Rect padding = getPadding(); int trackLeft = isLayoutRtl ? padding.left : viewWidth - padding.right - mTrackWidth; layoutView(mTrackView, trackLeft, padding.top, trackLeft + mTrackWidth, viewHeight - padding.bottom); int thumbLeft = isLayoutRtl ? padding.left : viewWidth - padding.right - mThumbWidth; int thumbTop = padding.top + mThumbOffset; layoutView(mThumbView, thumbLeft, thumbTop, thumbLeft + mThumbWidth, thumbTop + mThumbHeight); String popupText = mViewHelper.getPopupText(); boolean hasPopup = !TextUtils.isEmpty(popupText); mPopupView.setVisibility(hasPopup ? View.VISIBLE : View.INVISIBLE); if (hasPopup) { FrameLayout.LayoutParams popupLayoutParams = (FrameLayout.LayoutParams) mPopupView.getLayoutParams(); if (!Objects.equals(mPopupView.getText(), popupText)) { mPopupView.setText(popupText); int widthMeasureSpec = ViewGroup.getChildMeasureSpec( View.MeasureSpec.makeMeasureSpec(viewWidth, View.MeasureSpec.EXACTLY), padding.left + padding.right + mThumbWidth + popupLayoutParams.leftMargin + popupLayoutParams.rightMargin, popupLayoutParams.width); int heightMeasureSpec = ViewGroup.getChildMeasureSpec( View.MeasureSpec.makeMeasureSpec(viewHeight, View.MeasureSpec.EXACTLY), padding.top + padding.bottom + popupLayoutParams.topMargin + popupLayoutParams.bottomMargin, popupLayoutParams.height); mPopupView.measure(widthMeasureSpec, heightMeasureSpec); } int popupWidth = mPopupView.getMeasuredWidth(); int popupHeight = mPopupView.getMeasuredHeight(); int popupLeft = isLayoutRtl ? padding.left + mThumbWidth + popupLayoutParams.leftMargin : viewWidth - padding.right - mThumbWidth - popupLayoutParams.rightMargin - popupWidth; int popupAnchorY; switch (popupLayoutParams.gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: default: popupAnchorY = 0; break; case Gravity.CENTER_HORIZONTAL: popupAnchorY = popupHeight / 2; break; case Gravity.RIGHT: popupAnchorY = popupHeight; break; } int thumbAnchorY; switch (popupLayoutParams.gravity & Gravity.VERTICAL_GRAVITY_MASK) { case Gravity.TOP: default: thumbAnchorY = mThumbView.getPaddingTop(); break; case Gravity.CENTER_VERTICAL: { int thumbPaddingTop = mThumbView.getPaddingTop(); thumbAnchorY = thumbPaddingTop + (mThumbHeight - thumbPaddingTop - mThumbView.getPaddingBottom()) / 2; break; } case Gravity.BOTTOM: thumbAnchorY = mThumbHeight - mThumbView.getPaddingBottom(); break; } int popupTop = MathUtils.clamp(thumbTop + thumbAnchorY - popupAnchorY, padding.top + popupLayoutParams.topMargin, viewHeight - padding.bottom - popupLayoutParams.bottomMargin - popupHeight); layoutView(mPopupView, popupLeft, popupTop, popupLeft + popupWidth, popupTop + popupHeight); } }
Example #13
Source File: BottomSheetBehavior.java From material-components-android with Apache License 2.0 | 4 votes |
@Override public int clampViewPositionVertical(@NonNull View child, int top, int dy) { return MathUtils.clamp( top, getExpandedOffset(), hideable ? parentHeight : collapsedOffset); }
Example #14
Source File: HeaderScrollingViewBehavior.java From material-components-android with Apache License 2.0 | 4 votes |
final int getOverlapPixelsForOffset(final View header) { return overlayTop == 0 ? 0 : MathUtils.clamp((int) (getOverlapRatioForOffset(header) * overlayTop), 0, overlayTop); }
Example #15
Source File: AppBarLayout.java From material-components-android with Apache License 2.0 | 4 votes |
private void snapToChildIfNeeded(CoordinatorLayout coordinatorLayout, @NonNull T abl) { final int offset = getTopBottomOffsetForScrollingSibling(); final int offsetChildIndex = getChildIndexOnOffset(abl, offset); if (offsetChildIndex >= 0) { final View offsetChild = abl.getChildAt(offsetChildIndex); final LayoutParams lp = (LayoutParams) offsetChild.getLayoutParams(); final int flags = lp.getScrollFlags(); if ((flags & LayoutParams.FLAG_SNAP) == LayoutParams.FLAG_SNAP) { // We're set the snap, so animate the offset to the nearest edge int snapTop = -offsetChild.getTop(); int snapBottom = -offsetChild.getBottom(); if (offsetChildIndex == abl.getChildCount() - 1) { // If this is the last child, we need to take the top inset into account snapBottom += abl.getTopInset(); } if (checkFlag(flags, LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED)) { // If the view is set only exit until it is collapsed, we'll abide by that snapBottom += ViewCompat.getMinimumHeight(offsetChild); } else if (checkFlag( flags, LayoutParams.FLAG_QUICK_RETURN | LayoutParams.SCROLL_FLAG_ENTER_ALWAYS)) { // If it's set to always enter collapsed, it actually has two states. We // select the state and then snap within the state final int seam = snapBottom + ViewCompat.getMinimumHeight(offsetChild); if (offset < seam) { snapTop = seam; } else { snapBottom = seam; } } if (checkFlag(flags, LayoutParams.SCROLL_FLAG_SNAP_MARGINS)) { // Update snap destinations to include margins snapTop += lp.topMargin; snapBottom -= lp.bottomMargin; } final int newOffset = offset < (snapBottom + snapTop) / 2 ? snapBottom : snapTop; animateOffsetTo( coordinatorLayout, abl, MathUtils.clamp(newOffset, -abl.getTotalScrollRange(), 0), 0); } } }
Example #16
Source File: AppBarLayout.java From material-components-android with Apache License 2.0 | 4 votes |
@Override int setHeaderTopBottomOffset( @NonNull CoordinatorLayout coordinatorLayout, @NonNull T appBarLayout, int newOffset, int minOffset, int maxOffset) { final int curOffset = getTopBottomOffsetForScrollingSibling(); int consumed = 0; if (minOffset != 0 && curOffset >= minOffset && curOffset <= maxOffset) { // If we have some scrolling range, and we're currently within the min and max // offsets, calculate a new offset newOffset = MathUtils.clamp(newOffset, minOffset, maxOffset); if (curOffset != newOffset) { final int interpolatedOffset = appBarLayout.hasChildWithInterpolator() ? interpolateOffset(appBarLayout, newOffset) : newOffset; final boolean offsetChanged = setTopAndBottomOffset(interpolatedOffset); // Update how much dy we have consumed consumed = curOffset - newOffset; // Update the stored sibling offset offsetDelta = newOffset - interpolatedOffset; if (!offsetChanged && appBarLayout.hasChildWithInterpolator()) { // If the offset hasn't changed and we're using an interpolated scroll // then we need to keep any dependent views updated. CoL will do this for // us when we move, but we need to do it manually when we don't (as an // interpolated scroll may finish early). coordinatorLayout.dispatchDependentViewsChanged(appBarLayout); } // Dispatch the updates to any listeners appBarLayout.onOffsetChanged(getTopAndBottomOffset()); // Update the AppBarLayout's drawable state (for any elevation changes) updateAppBarLayoutDrawableState( coordinatorLayout, appBarLayout, newOffset, newOffset < curOffset ? -1 : 1, false /* forceJump */); } } else { // Reset the offset delta offsetDelta = 0; } updateAccessibilityActions(coordinatorLayout, appBarLayout); return consumed; }
Example #17
Source File: BottomSheetBehavior.java From Mysplash with GNU Lesser General Public License v3.0 | 4 votes |
@Override public int clampViewPositionVertical(@NonNull View child, int top, int dy) { return MathUtils.clamp( top, getExpandedOffset(), hideable ? parentHeight : collapsedOffset); }
Example #18
Source File: FastScroller.java From AndroidFastScroll with Apache License 2.0 | 4 votes |
private void scrollToThumbOffset(int thumbOffset) { int thumbOffsetRange = getThumbOffsetRange(); thumbOffset = MathUtils.clamp(thumbOffset, 0, thumbOffsetRange); int scrollOffset = (int) ((long) getScrollOffsetRange() * thumbOffset / thumbOffsetRange); mViewHelper.scrollTo(scrollOffset); }
Example #19
Source File: TimePicker.java From DateTimePicker with Apache License 2.0 | 2 votes |
/** * Sets the currently selected minute. * * @param minute the minute to set, in the range (0-59) * @see #getMinute() */ public void setMinute(@IntRange(from = 0, to = 59) int minute) { mDelegate.setMinute(MathUtils.clamp(minute, 0, 59)); }
Example #20
Source File: TimePicker.java From DateTimePicker with Apache License 2.0 | 2 votes |
/** * Sets the currently selected hour using 24-hour time. * * @param hour the hour to set, in the range (0-23) * @see #getHour() */ public void setHour(@IntRange(from = 0, to = 23) int hour) { mDelegate.setHour(MathUtils.clamp(hour, 0, 23)); }
Example #21
Source File: VolumeInfo.java From ARVI with Apache License 2.0 | 2 votes |
/** * Sets the Audio Volume. * * @param audioVolume the audio volume ratio (a value between 0.0 and 1.0) * @return the same instance of the {@link VolumeInfo} for chaining purposes. */ @NonNull public final VolumeInfo setVolume(@FloatRange(from = 0.0, to = 1.0) float audioVolume) { this.audioVolume = MathUtils.clamp(audioVolume, 0f, 1f); return this; }