假设一个控件使用Drawable作为背景,那么如果你想通过setBounds方法来控制背景的显示区域,那么你达不到目的.
原因是 当drawable被设置成控件背景后,当这个控件被绘制时(也就是draw(canvas)被调用时),控件在绘制背景时会自动更改其bounds为控件大小.
所以无论你怎么设置,系统都会在绘制这个控件背景时将其Bounds改为控件大小.
附上源码
public void draw(Canvas canvas) {
final int privateFlags = mPrivateFlags;
final boolean dirtyOpaque = (privateFlags & PFLAG_DIRTY_MASK) == PFLAG_DIRTY_OPAQUE &&
(mAttachInfo == null || !mAttachInfo.mIgnoreDirtyState);
mPrivateFlags = (privateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DRAWN;
/*
* Draw traversal performs several drawing steps which must be executed
* in the appropriate order:
*
* 1. Draw the background
* 2. If necessary, save the canvas' layers to prepare for fading
* 3. Draw view's content
* 4. Draw children
* 5. If necessary,