Java 切割XML形状的一部分

Java 切割XML形状的一部分,java,android,xml,android-shapedrawable,Java,Android,Xml,Android Shapedrawable,我有一个XML格式的矩形视图: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/lightblue"/> </shape&

我有一个XML格式的矩形视图:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"> 

        <solid android:color="@color/lightblue"/> 
    </shape>

我想要的是将其切成两半,因此结果如下所示:

可能吗?如果是,我如何实现它

注:

1) 添加旋转的白色矩形不是解决方案。我需要保持蓝色形状的切割区域透明(下面有更多的视图层)


2) rect的左下角有点圆(我忘了在上图中画它)。

从API 21开始,您可以使用

这就是我所做的,根据需要更改号码。 创建了一个可绘制的
my_custom_shape.xml
资源文件

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="45" >
    <group
        android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="#000"
            android:pathData="m 0,0 l 50,100 -50,0 z" />
    </group>
</vector>

输出:

在您的
视图中
将其设置为backround
android:background=“@drawable/my\u custom\u shape”


注意:忘记尝试使用px而不是dp,请参见将有助于保持每个设备的大小相同,请尝试使用
形状可移动的
,如下所示:

Drawable d = new ShapeDrawable(new S(Color.BLUE, 32));
其中class
S
是一个自定义的
形状

class S extends Shape {
    final int color;
    final float radius;
    Path path = new Path();

    public S(int color, float radius) {
        this.color = color;
        this.radius = radius;
    }

    @Override
    protected void onResize(float width, float height) {
        path.reset();
        path.moveTo(0, 0);
        path.lineTo(width, height);
        path.lineTo(radius, height);
        RectF oval = new RectF(0, height - 2 * radius, 2 * radius, height);
        path.arcTo(oval, 90, 90);
        path.close();
    }

    @Override
    public void draw(Canvas canvas, Paint paint) {
        paint.setColor(color);
        canvas.drawPath(path, paint);
    }
}

现在,您可以在对
View#setBackground()
TextView#setCompoundDrawables()
等的任何调用中使用
Drawable d
,将
ShapeDrawable
与传递给
ShapeDrawable
构造函数的自定义
ShapeDrawable
对象一起使用
,然后将其传递给ShapeDrawable构造函数。这应该没问题。但是,在得到这个ShapeDrawable之后,我该如何剪辑它呢?很简单:
Path#arcTo
,在你的例子中
arcTo(oval,90,90)
正如我所说的使用ShapeDrawable,现在你可以在视图中使用它了#setBackground calltry在
dimens.xml
文件中定义
4dp
,然后通过
getResources().getDimen(R.dimen.some\u-four\dp)
他希望左下角是圆形的,你不能使用
矢量绘图
有些东西总比没有好,也许你可以在测量之前为他圆形:一个定制的
android.graphics.drawable.shapes.Shape
谢谢分享,也许你可以发布一个答案,我也很乐意投这个票,API 21目前仍处于相当高的水平。我不能使用它,即使它可以正常工作。