/** * This method initiates the bottomNavigationBar and handles layout related values */ private void init() { // MarginLayoutParams marginParams = new ViewGroup.MarginLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) getContext().getResources().getDimension(R.dimen.bottom_navigation_padded_height))); // marginParams.setMargins(0, (int) getContext().getResources().getDimension(R.dimen.bottom_navigation_top_margin_correction), 0, 0); setLayoutParams(new ViewGroup.LayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))); LayoutInflater inflater = LayoutInflater.from(getContext()); View parentView = inflater.inflate(R.layout.bottom_navigation_bar_container, this, true); mBackgroundOverlay = (FrameLayout) parentView.findViewById(R.id.bottom_navigation_bar_overLay); mContainer = (FrameLayout) parentView.findViewById(R.id.bottom_navigation_bar_container); mTabContainer = (LinearLayout) parentView.findViewById(R.id.bottom_navigation_bar_item_container); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { this.setOutlineProvider(ViewOutlineProvider.BOUNDS); } else { //to do } ViewCompat.setElevation(this, mElevation); setClipToPadding(false); }
HeaderElevationController(View header) { mHeader = header; final Resources res = mHeader.getContext().getResources(); mMaxElevation = res.getDimension(R.dimen.all_apps_header_max_elevation); mScrollToElevation = res.getDimension(R.dimen.all_apps_header_scroll_to_elevation); // We need to provide a custom outline so the shadow only appears on the bottom edge. // The top, left and right edges are all extended out, and the shadow is clipped // by the parent. final ViewOutlineProvider vop = new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { final View parent = (View) mHeader.getParent(); final int left = parent.getLeft(); // Use the parent to account for offsets final int top = view.getTop(); final int right = left + view.getWidth(); final int bottom = view.getBottom(); final int offset = Utilities.pxFromDp(mMaxElevation, res.getDisplayMetrics()); outline.setRect(left - offset, top - offset, right + offset, bottom); } }; mHeader.setOutlineProvider(vop); }
@Override protected void onSizeChanged(final int w, final int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mDrawable.setBounds(0, 0, w, h); mWidth = w; mHeight = h; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setOutlineProvider(new ViewOutlineProvider() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); } }
private void initView(AttributeSet attrs) { edgePaint.setColor(DEFAULT_EDGE_COLOR); edgePaint.setAntiAlias(true); if (attrs != null) { TypedArray arr = getContext().obtainStyledAttributes(attrs, R.styleable.DepthView); edgePaint.setColor(arr.getInt(R.styleable.DepthView_edge_color, DEFAULT_EDGE_COLOR)); setIsCircle(arr.getBoolean(R.styleable.DepthView_is_circle, false)); depth = arr.getDimension(R.styleable.DepthView_depth, DEFAULT_THICKNESS * getResources().getDisplayMetrics().density); customShadowElevation = arr.getDimension(R.styleable.DepthView_custom_elevation, 0); } else { edgePaint.setColor(DEFAULT_EDGE_COLOR); depth = DEFAULT_THICKNESS * getResources().getDisplayMetrics().density; } setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { } }); }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private Drawable createFillDrawable() { StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[]{-android.R.attr.state_enabled}, createCircleDrawable(mColorDisabled)); drawable.addState(new int[]{android.R.attr.state_pressed}, createCircleDrawable(mColorPressed)); drawable.addState(new int[]{}, createCircleDrawable(mColorNormal)); if (Util.hasLollipop()) { RippleDrawable ripple = new RippleDrawable(new ColorStateList(new int[][]{{}}, new int[]{mColorRipple}), drawable, null); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); mBackgroundDrawable = ripple; return ripple; } mBackgroundDrawable = drawable; return drawable; }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private Drawable createFillDrawable() { StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[]{android.R.attr.state_pressed}, createRectDrawable(mColorPressed)); drawable.addState(new int[]{}, createRectDrawable(mColorNormal)); if (Util.hasLollipop()) { RippleDrawable ripple = new RippleDrawable(new ColorStateList(new int[][]{{}}, new int[]{mColorRipple}), drawable, null); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); mBackgroundDrawable = ripple; return ripple; } mBackgroundDrawable = drawable; return drawable; }
private void initView(AttributeSet attrs) { setLayerType(LAYER_TYPE_HARDWARE, null); edgePaint.setColor(DEFAULT_EDGE_COLOR); edgePaint.setAntiAlias(true); if (attrs != null) { TypedArray arr = getContext().obtainStyledAttributes(attrs, R.styleable.DepthRelativeLayout); edgePaint.setColor(arr.getInt(R.styleable.DepthRelativeLayout_depth_edgeColor, DEFAULT_EDGE_COLOR)); setIsCircle(arr.getBoolean(R.styleable.DepthRelativeLayout_depth_isCircle, false)); depth = arr.getDimension(R.styleable.DepthRelativeLayout_depth_value, DEFAULT_THICKNESS * getResources().getDisplayMetrics().density); depthIndex = arr.getInteger(R.styleable.DepthRelativeLayout_depth_zIndex, depthIndex); animationDelay = arr.getInteger(R.styleable.DepthRelativeLayout_depth_animationDelay, animationDelay); customShadowElevation = arr.getDimension(R.styleable.DepthRelativeLayout_depth_elevation, 0); } else { edgePaint.setColor(DEFAULT_EDGE_COLOR); depth = DEFAULT_THICKNESS * getResources().getDisplayMetrics().density; } setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { } }); }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public ViewOutlineProvider getOutlineProvider() { shadowpath = new Path(); if (config.getRadius() == 0) { shadowpath = path; } else { rect = new Rect(0, 0, (int) width, (int) height); RectF r = new RectF(rect); shadowpath.addRoundRect(r, config.getRadius(), config.getRadius(), Path.Direction.CCW); shadowpath.op(path, shadowpath, Path.Op.INTERSECT); } return new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { if (path.isConvex()) { outline.setConvexPath(shadowpath); } } }; }
private void initialize() { borderPath = new Path(); oval = new RectF(); borderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); borderPaint.setStyle(Paint.Style.STROKE); // ViewOutlineProvider does not support clipping customized path if (canUseViewOutlineProvider()) { ViewOutlineProvider provider = new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { if (canUseViewOutlineProvider()) { float radius = Math.max(0, cornerRadius); outline.setRoundRect(0, 0, getWidth(), getHeight(), radius); } } }; setOutlineProvider(provider); setClipToOutline(true); } }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private Drawable createFillDrawable() { StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[]{-android.R.attr.state_enabled}, createCircleDrawable(mColorDisabled)); drawable.addState(new int[]{android.R.attr.state_pressed}, createCircleDrawable(mColorPressed)); drawable.addState(new int[]{}, createCircleDrawable(mColorNormal)); if (!isInEditMode() && Util.hasLollipop()) { RippleDrawable ripple = new RippleDrawable(new ColorStateList(new int[][]{{}}, new int[]{mColorRipple}), drawable, null); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); mBackgroundDrawable = ripple; return ripple; } mBackgroundDrawable = drawable; return drawable; }
public ForegroundRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundView); final Drawable drawable = a.getDrawable( R.styleable.ForegroundView_android_foreground); if (drawable != null) { setForeground(drawable); } a.recycle(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setOutlineProvider(ViewOutlineProvider.BOUNDS); } }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private Drawable createFillDrawable() { StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[] {android.R.attr.state_pressed}, createRectDrawable(mColorPressed) ); drawable.addState(new int[] {}, createRectDrawable(mColorNormal)); if(Util.hasLollipop() && mUsingRipple) { RippleDrawable ripple = new RippleDrawable(new ColorStateList(new int[][] {{}}, new int[] {mColorRipple} ), drawable, null); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); mBackgroundDrawable = ripple; return ripple; } mBackgroundDrawable = drawable; return drawable; }
private void initOutlineProvider() { if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { setOutlineProvider( new ViewOutlineProvider() { @Override @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void getOutline(View view, Outline outline) { if (chipDrawable != null) { chipDrawable.getOutline(outline); } else { outline.setAlpha(0.0f); } } }); } }
private void initialize() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setOutlineProvider(new ViewOutlineProvider() { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void getOutline(View view, Outline outline) { outline.setOval( view.getPaddingLeft(), view.getPaddingTop(), view.getWidth() - view.getPaddingRight(), view.getHeight() - view.getPaddingBottom()); } }); setClipToOutline(true); } }
private void calculateLayout() { if (settings == null) { return; } height = getMeasuredHeight(); width = getMeasuredWidth(); if (width > 0 && height > 0) { clipPath = createClipPath(); ViewCompat.setElevation(this, settings.getElevation()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !settings.isCropInside()) { ViewCompat.setElevation(this, settings.getElevation()); setOutlineProvider(new ViewOutlineProvider() { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void getOutline(View view, Outline outline) { outline.setConvexPath(clipPath); } }); } } }
private void updateCorners() { if (cornerRadius > 0) { if (getWidth() > 0 && getHeight() > 0) cornerRadius = Math.min(cornerRadius, Math.min(getWidth(), getHeight()) / 2.0f); if (Carbon.IS_LOLLIPOP && renderingMode == RenderingMode.Auto) { setClipToOutline(true); setOutlineProvider(ShadowShape.viewOutlineProvider); } else { if (Carbon.IS_LOLLIPOP) setClipToOutline(false); cornersMask = new Path(); cornersMask.addRoundRect(new RectF(0, 0, getWidth(), getHeight()), cornerRadius, cornerRadius, Path.Direction.CW); cornersMask.setFillType(Path.FillType.INVERSE_WINDING); } } else if (Carbon.IS_LOLLIPOP) { setOutlineProvider(ViewOutlineProvider.BOUNDS); } }
public FloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr); setClickable(true); // Set the outline provider for this view. The provider is given the outline which it can // then modify as needed. In this case we set the outline to be an oval fitting the height // and width. setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, getWidth(), getHeight()); } }); // Finally, enable clipping to the outline, using the provider we set above setClipToOutline(true); }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private Drawable createFillDrawable() { StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[]{android.R.attr.state_pressed}, createCircleDrawable(mColorPressed)); drawable.addState(new int[]{}, createCircleDrawable(mColorNormal)); if (Util.hasLollipop()) { RippleDrawable ripple = new RippleDrawable(new ColorStateList(new int[][]{{}}, new int[]{mColorRipple}), drawable, null); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); mBackgroundDrawable = ripple; return ripple; } mBackgroundDrawable = drawable; return drawable; }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private Drawable createFillDrawable() { StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[]{android.R.attr.state_pressed}, createRectDrawable(mColorPressed)); drawable.addState(new int[]{}, createRectDrawable(mColorNormal)); if (hasLollipop()) { RippleDrawable ripple = new RippleDrawable(new ColorStateList(new int[][]{{}}, new int[]{mColorRipple}), drawable, null); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); mBackgroundDrawable = ripple; return ripple; } mBackgroundDrawable = drawable; return drawable; }
@Override protected void onSizeChanged(final int w, final int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mDrawable.setBounds(0, 0, w, h); mBounds.set(0, 0, w, h); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setOutlineProvider(new ViewOutlineProvider() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public void getOutline(View view, Outline outline) { outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); } }