我正在尝试扩展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),请参见截图:
在左侧,您可以看到我的自定义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);
}
}