Похоже, что не было правильного решения этого. Слой для статичных, а не 9-патч-изображений, по-видимому, или так кажется.
Поэтому я расширил Button, изменил его на Draw, я должен использовать Canvas.restore (), чтобы вырваться из полей, которые толкали мои края вниз, и поместить мое изображение в верхний правый угол ...
вот код:
@Override
public void setPadding(int left, int top, int right, int bottom) {
right += mImageWidth;
super.setPadding(left, top, right, bottom);
}
private void setVImageDrawable(Drawable d) {
mVImageDrawable = d;
mImageWidth = mVImageDrawable.getIntrinsicWidth();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if( mVImageDrawable != null && mIsMarked){
//for some reason the clip binds us to position with margins, which is not so good for us.
//we need to save the clip, restore the canvas to pre clipping mode, do what we need then
//put the canvas back to it's previous clipping state.
Rect bounds = canvas.getClipBounds();
canvas.restore();
int right = getRight();
int left = right - mImageWidth;
int top = getTop();
int bottom = top + mVImageDrawable.getIntrinsicHeight();
mVImageDrawable.setBounds(left, top, right, bottom);
mVImageDrawable.draw(canvas);
canvas.save();
canvas.clipRect(bounds);
}
}
Если я не разбиваю исходный холст, то есть "толкаю" любые поля, которые я добавляю, это также можно исправить, я думаю, используя свойство xml, которое указывает, должны ли дочерние элементы быть обрезанными на макете, содержащем эту кнопку, но я найдите это слабое решение, так как оно делает мою кнопку зависимой от наших условий.
Само изображение, которое я получаю из XML, используя новые атрибуты, стиль и тему, которые я объявляю.
Надеюсь, это поможет некоторым людям там.