пытается создать прямоугольный ShapeDrawable, который имеет прямоугольный вырез - его нужно на самом деле вырезать так, чтобы середина была «прозрачной», это не мог быть белый прямоугольник поверх более крупного небелого или что-то в этом роде.
Вот что у меня есть (но все, что можно увидеть, это верхняя полоса прямоугольника, которая, как ни странно, черная, несмотря на то, что это цвет выреза):
PorterDuffColorFilter pd = new PorterDuffColorFilter(Color.BLACK, PorterDuff.Mode.SRC_OUT);
ShapeDrawable cutout = new ShapeDrawable();
cutout.setBounds(top.x, top.y, top.x+cellLength*matCols, top.y+cellLength*matRows);
cutout.setColorFilter(pd);
ShapeDrawable border = new ShapeDrawable();
border.setBounds(Math.round(top.x-thick*cellLength), Math.round(top.y-thick*cellLength), Math.round(top.x+cellLength*(matCols+thick)), Math.round(top.y+cellLength*(matRows+thick)));
LayerDrawable ogre = new LayerDrawable(new Drawable[]{cutout, border});
Button test = new Button(this.getContext());
test.setLayoutParams(new LayoutParams((int)Math.round(cellLength*(matCols + 2*thick)), (int)Math.round(cellLength*thick)));
test.setBackground(ogre);