RecentApplicationsBackgroundpublic class RecentApplicationsBackground extends android.widget.LinearLayout A vertical linear layout. However, instead of drawing the background
behnd the items, it draws the background outside the items based on the
padding. If there isn't enough room to draw both, it clips the background
instead of the contents. |
Fields Summary |
---|
private static final String | TAG | private boolean | mBackgroundSizeChanged | private android.graphics.drawable.Drawable | mBackground | private android.graphics.Rect | mTmp0 | private android.graphics.Rect | mTmp1 |
Methods Summary |
---|
public void | draw(android.graphics.Canvas canvas)
final Drawable background = mBackground;
if (background != null) {
if (mBackgroundSizeChanged) {
mBackgroundSizeChanged = false;
Rect chld = mTmp0;
Rect bkg = mTmp1;
mBackground.getPadding(bkg);
getChildBounds(chld);
// This doesn't clamp to this view's bounds, which is what we want,
// so that the drawing is clipped.
final int top = chld.top - bkg.top;
final int bottom = chld.bottom + bkg.bottom;
// The background here is a gradient that wants to
// extend the full width of the screen (whatever that
// may be).
int left, right;
if (false) {
// This limits the width of the drawable.
left = chld.left - bkg.left;
right = chld.right + bkg.right;
} else {
// This expands it to full width.
left = 0;
right = getRight();
}
background.setBounds(left, top, right, bottom);
}
}
mBackground.draw(canvas);
if (false) {
android.graphics.Paint p = new android.graphics.Paint();
p.setColor(0x88ffff00);
canvas.drawRect(background.getBounds(), p);
}
canvas.drawARGB((int)(0.75*0xff), 0, 0, 0);
super.draw(canvas);
| protected void | drawableStateChanged()
Drawable d = mBackground;
if (d != null && d.isStateful()) {
d.setState(getDrawableState());
}
super.drawableStateChanged();
| private void | getChildBounds(android.graphics.Rect r)
r.left = r.top = Integer.MAX_VALUE;
r.bottom = r.right = Integer.MIN_VALUE;
final int N = getChildCount();
for (int i=0; i<N; i++) {
View v = getChildAt(i);
if (v.getVisibility() == View.VISIBLE) {
r.left = Math.min(r.left, v.getLeft());
r.top = Math.min(r.top, v.getTop());
r.right = Math.max(r.right, v.getRight());
r.bottom = Math.max(r.bottom, v.getBottom());
}
}
| private void | init()
mBackground = getBackground();
setBackgroundDrawable(null);
setPadding(0, 0, 0, 0);
setGravity(Gravity.CENTER);
| public void | jumpDrawablesToCurrentState()
super.jumpDrawablesToCurrentState();
if (mBackground != null) mBackground.jumpToCurrentState();
| protected void | onAttachedToWindow()
super.onAttachedToWindow();
mBackground.setCallback(this);
setWillNotDraw(false);
| protected void | onDetachedFromWindow()
super.onDetachedFromWindow();
mBackground.setCallback(null);
| protected boolean | setFrame(int left, int top, int right, int bottom)
setWillNotDraw(false);
if (mLeft != left || mRight != right || mTop != top || mBottom != bottom) {
mBackgroundSizeChanged = true;
}
return super.setFrame(left, top, right, bottom);
| protected boolean | verifyDrawable(android.graphics.drawable.Drawable who)
return who == mBackground || super.verifyDrawable(who);
|
|