当前位置: 首页 > 知识库问答 >
问题:

如何以编程方式创建android形状背景?

罗波鸿
2023-03-14

如何以编程方式创建此形状?

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

    <solid android:color="#e67e22"/> 
    <corners
        android:topLeftRadius="0dp"
        android:topRightRadius="0dp"
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"/>
</shape>

我尝试过这个简单的函数,它可以获取角点、颜色并将其设置为形状:

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.category_header);

    GradientDrawable drawable = (GradientDrawable) linearLayout.getDrawable();

    float[] values = { 0.2f, 0.2f, 0.2f, 0.2f };
    drawable.setCornerRadii(values);

但我有个错误:

类型LinearLayout的方法getDrawable()未定义

共有3个答案

薛欣德
2023-03-14

我创建了一个库,它可以帮助以编程方式创建可绘图项。

请参见此处:DrawableToolbox。

使用DrawableToolbox,您可以通过以下方式创建它:

Drawable drawable = new DrawableBuilder()
        .rectangle()
        .solidColor(0xffe67e22)
        .bottomLeftRadius(20) // in pixels
        .bottomRightRadius(20) // in pixels
//        .cornerRadii(0, 0, 20, 20) // the same as the two lines above
        .build();
司寇琨
2023-03-14

如果你想要的只是一个简单的圆角矩形,长话短说。

    float r=8; // the border radius in pixel
    ShapeDrawable shape = new ShapeDrawable (new RoundRectShape(new float[] { r, r, r, r, r, r, r, r },null,null));
    shape.getPaint().setColor(Color.RED);
    view.setBackground(shape);
  • 什么是圆形矩形

RoundRectShape指定外部(圆形)矩形和可选的内部(圆形)矩形。

// RoundRectShape constructor

   RoundRectShape(float[] outerRadii,
                     RectF inset,
                   float[] innerRadii);
  • outerRadii是一个由8个半径值组成的数组,用于外部roundrect。前两个浮点数用于左上角(其余对为顺时针方向)。对于外部矩形上没有圆角,只需传递null

例如:

>

  • inset是一个RectF,它指定从内部矩形到外部矩形每一侧的距离。对于没有内部,传递null。

    innerRadii是一个包含8个半径值的数组,用于内部roundrect。前两个浮点数用于左上角(其余对为顺时针方向)。对于内部矩形上没有圆角,请传递null。如果inset参数为null,则忽略此参数。

    例如:

    ShapeDrawable shape = new ShapeDrawable(
            new RoundRectShape(
                new float[]{20, 20, 20, 20, 20, 20, 20, 20},
                new RectF(10, 20, 10, 20),
                new float[]{40, 40, 40, 40, 40, 40, 40, 40}));
    

  • 谷梁昊空
    2023-03-14

    您可以这样做:

    public static void customView(View v, int backgroundColor, int borderColor) {
        GradientDrawable shape = new GradientDrawable();
        shape.setShape(GradientDrawable.RECTANGLE);
        shape.setCornerRadii(new float[] { 8, 8, 8, 8, 0, 0, 0, 0 });
        shape.setColor(backgroundColor);
        shape.setStroke(3, borderColor);
        v.setBackground(shape);
    }
    

    有关setCornerRadii参数的含义,请参阅文档。

    您可以在整个应用程序中使用此功能,并可以选择边框和背景色。

     类似资料:
    • 我有一个充满自定义视图的应用程序。当我尝试以编程方式创建FAB时,它会抛出一个错误 原因:java.lang.IllegalArgumentException:您需要在设计库中使用theme.AppCompat主题(或后代)。

    • 我正尝试使用以下命令以编程方式创建:

    • 我正在编辑以使问题更简单,希望这有助于获得准确的答案。 假设我有以下形状: 如何从一个活动类中以编程方式设置颜色?

    • 我想创建一个应用程序,它可以将屏幕行为记录为视频,并以编程方式保存在设备上。有人能帮我吗?

    • 问题内容: 是否有免费的库可根据图像序列创建MPEG(或任何其他简单的视频格式)? 它也必须在Linux上运行,并且最好具有Python绑定。 问题答案: 我知道有一个mencoder(是mplayer项目的一部分)和ffmpeg,它们都可以做到这一点。

    • 问题内容: 概要 我正在开发一个Web应用程序以学习Django(python 3.4和Django 1.6.10)。该Web应用程序具有复杂且经常更新的工作流程。我决定集成Django-Viewflow库(https://github.com/viewflow/viewflow/),因为这似乎是处理工作流且不将工作流逻辑与应用程序模型合并的一种非常方便的方法。 在这种情况下,我创建了一个工作流以