FileDocCategorySizeDatePackage
RecentApplicationsBackground.javaAPI DocAndroid 5.1 API5231Thu Mar 12 22:22:42 GMT 2015com.android.internal.policy.impl

RecentApplicationsBackground

public 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
Constructors Summary
public RecentApplicationsBackground(android.content.Context context)


       
        this(context, null);
        init();
    
public RecentApplicationsBackground(android.content.Context context, android.util.AttributeSet attrs)

        super(context, attrs);
        init();
    
Methods Summary
public voiddraw(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 voiddrawableStateChanged()

        Drawable d = mBackground;
        if (d != null && d.isStateful()) {
            d.setState(getDrawableState());
        }
        super.drawableStateChanged();
    
private voidgetChildBounds(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 voidinit()

        mBackground = getBackground();
        setBackgroundDrawable(null);
        setPadding(0, 0, 0, 0);
        setGravity(Gravity.CENTER);
    
public voidjumpDrawablesToCurrentState()

        super.jumpDrawablesToCurrentState();
        if (mBackground != null) mBackground.jumpToCurrentState();
    
protected voidonAttachedToWindow()

        super.onAttachedToWindow();
        mBackground.setCallback(this);
        setWillNotDraw(false);
    
protected voidonDetachedFromWindow()

        super.onDetachedFromWindow();
        mBackground.setCallback(null);
    
protected booleansetFrame(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 booleanverifyDrawable(android.graphics.drawable.Drawable who)

        return who == mBackground || super.verifyDrawable(who);