SetBounds在自定义ImageButton中可绘制的背景上

时间:2016-03-15 11:58:11

标签: android android-custom-view android-drawable bounds android-imagebutton

我正在尝试扩展ImageButton,并在标准ImageButton的图像和背景之上创建自己的图形。我必须缩放ImageView的背景大小,以便在画布上绘制其他形状。所以在onDraw()方法中我调用:

getBackground().setBounds(getWidth()/2-25, getHeight()/2-25, getWidth()/2+25, getHeight()
                /2+25);

要缩小背景大小并使其居中,这就是奇怪的事情:当我在genymotion(5.1.0 API 22)上使用它时,它可以工作,但是它不适用于我的华为P-8 Lite(5.0.1) API 21),请参见截图: enter image description here

在左侧,您可以看到我的自定义ImageButton,在右侧标准ImageButton上,两者在src和background xml属性中都具有相同的值。

有人知道发生了什么吗?提前感谢您的帮助!

以下是完整的源代码:

    public class CustomImageButton extends ImageButton {

    private Paint bg;

    public CustomImageButton(Context context) {
        super(context);
        init();
    }

    public CustomImageButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public CustomImageButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }

    private void init() {
        bg = new Paint(Paint.ANTI_ALIAS_FLAG);
        bg.setColor(Color.parseColor("#009688"));
        bg.setStyle(Paint.Style.STROKE);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        getBackground().setBounds(getWidth() / 2 - 25, getHeight() / 2 - 25, getWidth() / 2 + 25, getHeight()
                / 2 + 25);
        canvas.drawRect(getWidth() / 2 - 25, getHeight() / 2 - 25, getWidth() / 2 + 25,
                getHeight() / 2 + 25, bg);
        super.onDraw(canvas);
    }
}

0 个答案:

没有答案