试图制作一个具有矩形切口的矩形 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);
为什么不创建一个可绘制的 xml :
矩形.xml
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="4dp" android:color="#000000"></stroke>
</shape>
并像这样使用它:
test.setBackgroundResource(R.drawable.rect);
您可以在可绘制对象中使用 PathShape 而不是默认矩形。 向路径添加两个具有相反路径方向的矩形,以便将一个矩形从另一个矩形中切出。
或者,您可以将边框划分为不与剪切区域重叠的顶部、底部、左侧和右侧矩形。