Java 在布局底部创建三角形形状

Java 在布局底部创建三角形形状,java,android,android-drawable,material-components-android,material-components,Java,Android,Android Drawable,Material Components Android,Material Components,我正在开发一个android应用程序,它在活动的顶部包含一个形状,我正在尝试实现它,但很难做到。 我试图创建一个可绘制的文件,创建一个三角形形状,并设置底角半径以匹配上面的形状,但不起作用。任何人都可以帮助我。你可以使用官方提供的 只需使用以下内容扩展EdgeTreatment: public class MyTriangleEdge extends EdgeTreatment { private final float size; private final boolean ins

我正在开发一个android应用程序,它在活动的顶部包含一个形状,我正在尝试实现它,但很难做到。

我试图创建一个可绘制的文件,创建一个三角形形状,并设置底角半径以匹配上面的形状,但不起作用。任何人都可以帮助我。

你可以使用官方提供的

只需使用以下内容扩展EdgeTreatment:

public class MyTriangleEdge extends EdgeTreatment {

  private final float size;
  private final boolean inside;

  public MyTriangleEdge(float size, boolean inside) {
    this.size = size;
    this.inside = inside;
  }

  @Override
  public void getEdgePath(
      float length, float center, float interpolation, @NonNull ShapePath shapePath) {
    shapePath.lineTo(0, 0);
    shapePath.lineTo(center, inside ? size  : -size );
    shapePath.lineTo(length, 0);
  }
然后应用它:

MyTriangleEdge edgeTreatment = new MyTriangleEdge(height,false);

LinearLayout linearLayout= findViewById(R.id.xxxx);
ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel()
    .toBuilder()
    .setBottomEdge(edgeTreatment)
    .build();

MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);

ViewCompat.setBackground(linearLayout,shapeDrawable);

同样对于边缘处理,父视图必须通过在xml中设置android:clipChildren=false来禁用子视图的剪裁

非常感谢您的回复,但toBuilder方法无法解决。@user8545027您必须至少使用1.1.0版(当前为1.1.0-rc02)