如何以编程方式制作可绘制的形状(Android)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以编程方式制作可绘制的形状(Android)相关的知识,希望对你有一定的参考价值。

我正在制作一个自定义TextView(Java类),我很难“翻译”该行(在“原始TextView”xml上)

android:background="@drawable/myDrawableShape"

到一个java void来改变“myDrawableShape”的颜色

myDrawableShape.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#ffafafaf" />
<corners android:radius="15dp" />

我将从String中获取颜色,以编程方式更改颜色的void(例如)

void colorSet(String color)

提前致谢!

答案

然后,您可以使用下面的代码在Java中创建Shape Drawable。

public Drawable getRoundRect() {
    RoundRectShape rectShape = new RoundRectShape(new float[]{
            10, 10, 10, 10,
            10, 10, 10, 10
    }, null, null);

    ShapeDrawable shapeDrawable = new ShapeDrawable(rectShape);
    shapeDrawable.getPaint().setColor(Color.parseColor("#FF0000"));
    shapeDrawable.getPaint().setStyle(Paint.Style.FILL);
    shapeDrawable.getPaint().setAntiAlias(true);
    shapeDrawable.getPaint().setFlags(Paint.ANTI_ALIAS_FLAG);
    return shapeDrawable;
}
另一答案

换颜色:

  TextView tv= (TextView) findViewById(R.id.txt_time);

    Drawable background = getResources().getDrawable(R.drawable.test);

    if (background instanceof ShapeDrawable) {
        // If 'ShapeDrawable'
        ShapeDrawable shapeDrawable = (ShapeDrawable) background;
        shapeDrawable.getPaint().setColor(ContextCompat.getColor(this,R.color.colorAccent));
    } else if (background instanceof GradientDrawable) {
        // If'GradientDrawable'
        GradientDrawable gradientDrawable = (GradientDrawable) background;
        gradientDrawable.setColor(ContextCompat.getColor(this,R.color.colorPrimary));
    } else if (background instanceof ColorDrawable) {
        // If ColorDrawable
        ColorDrawable colorDrawable = (ColorDrawable) background;
        colorDrawable.setColor(ContextCompat.getColor(this,R.color.colorPrimaryDark));
    }
    tv.setBackground(background);

以上是关于如何以编程方式制作可绘制的形状(Android)的主要内容,如果未能解决你的问题,请参考以下文章

从另一个视图控制器中的类中快速绘制形状(以编程方式)

如何在 Android 中以编程方式设置背景可绘制对象

如何将形状drawable和drawable组合成单个drawable

LayerDrawable 以编程方式

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

以编程方式更改图层列表可绘制项的底部属性