/// <summary> /// Supply a Drawable that is to be rendered on top of all of the child /// views in the frame layout. /// </summary> /// <remarks> /// Supply a Drawable that is to be rendered on top of all of the child /// views in the frame layout. Any padding in the Drawable will be taken /// into account by ensuring that the children are inset to be placed /// inside of the padding area. /// </remarks> /// <param name="drawable">The Drawable to be drawn on top of the children.</param> /// <attr>ref android.R.styleable#FrameLayout_foreground</attr> public virtual void setForeground(android.graphics.drawable.Drawable drawable) { if (mForeground != drawable) { if (mForeground != null) { mForeground.setCallback(null); unscheduleDrawable(mForeground); } mForeground = drawable; mForegroundPaddingLeft = 0; mForegroundPaddingTop = 0; mForegroundPaddingRight = 0; mForegroundPaddingBottom = 0; if (drawable != null) { setWillNotDraw(false); drawable.setCallback(this); if (drawable.isStateful()) { drawable.setState(getDrawableState()); } if (mForegroundGravity == android.view.Gravity.FILL) { android.graphics.Rect padding = new android.graphics.Rect(); if (drawable.getPadding(padding)) { mForegroundPaddingLeft = padding.left; mForegroundPaddingTop = padding.top; mForegroundPaddingRight = padding.right; mForegroundPaddingBottom = padding.bottom; } } } else { setWillNotDraw(true); } requestLayout(); invalidate(); } }
/// <summary>Sets the thumb that will be drawn at the end of the progress meter within the SeekBar. /// </summary> /// <remarks> /// Sets the thumb that will be drawn at the end of the progress meter within the SeekBar. /// <p> /// If the thumb is a valid drawable (i.e. not null), half its width will be /// used as the new thumb offset (@see #setThumbOffset(int)). /// </remarks> /// <param name="thumb">Drawable representing the thumb</param> public virtual void setThumb(android.graphics.drawable.Drawable thumb) { bool needUpdate; // This way, calling setThumb again with the same bitmap will result in // it recalcuating mThumbOffset (if for example it the bounds of the // drawable changed) if (mThumb != null && thumb != mThumb) { mThumb.setCallback(null); needUpdate = true; } else { needUpdate = false; } if (thumb != null) { thumb.setCallback(this); // Assuming the thumb drawable is symmetric, set the thumb offset // such that the thumb will hang halfway off either edge of the // progress bar. mThumbOffset = thumb.getIntrinsicWidth() / 2; // If we're updating get the new states if (needUpdate && (thumb.getIntrinsicWidth() != mThumb.getIntrinsicWidth() || thumb .getIntrinsicHeight() != mThumb.getIntrinsicHeight())) { requestLayout(); } } mThumb = thumb; invalidate(); if (needUpdate) { updateThumbPos(getWidth(), getHeight()); if (thumb.isStateful()) { // Note that if the states are different this won't work. // For now, let's consider that an app bug. int[] state = getDrawableState(); thumb.setState(state); } } }
private void updateDrawable(android.graphics.drawable.Drawable d) { if (mDrawable != null) { mDrawable.setCallback(null); unscheduleDrawable(mDrawable); } mDrawable = d; if (d != null) { d.setCallback(this); if (d.isStateful()) { d.setState(getDrawableState()); } d.setLevel(mLevel); mDrawableWidth = d.getIntrinsicWidth(); mDrawableHeight = d.getIntrinsicHeight(); applyColorMod(); configureBounds(); } else { mDrawableWidth = mDrawableHeight = -1; } }