Android - 可绘制形状样式中的多种颜色和大小

Posted

技术标签:

【中文标题】Android - 可绘制形状样式中的多种颜色和大小【英文标题】:Android - Multiple colors & size in drawable shape style 【发布时间】:2013-07-19 06:19:35 【问题描述】:

我正在尝试为我的 TextView 设置一个圆形背景,因此我创建了如下形状样式。 但是我需要有多种颜色和多种尺寸(而 textSize 保持不变),所以我需要在样式中设置宽度/高度。

据我了解..Layer List 将所有形状放在一起?因为我需要在不同的地方调用它12次,所以有12个shape style xml看起来很麻烦。

有没有更好的方法在一个 XML 中包含所有不同的形状/大小组合?

形状样式:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
    <corners android:radius="10dp"/>
    <solid android:color="@color/girl_orange"/>
        <size
        android:
        android: />
</shape>

在布局 xml 中被调用:

android:background="@drawable/skills_circle"

提前致谢!!

【问题讨论】:

【参考方案1】:

创建一个自定义 Drawable,这样您就可以拥有数百万种大小/颜色的组合:

class CircleDrawable extends Drawable 
...

【讨论】:

谢谢!!我听从了您的建议并创建了一个自定义的可绘制类。我在答案中发布了我的代码:D【参考方案2】:

所以我按照 pskink 的建议创建了一个 CircleDrawable 类。

它非常适合我的应用程序(虽然我不知道它是否是正确的方法......),所以我想我会分享它。

public CircleDrawable(Bitmap bitmap, Context context) 
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);
    CircleDrawable.context = context;
    drawable = new ShapeDrawable(new OvalShape());
    setColor();  // supports multiple color
    setSize();  //supports multiple size


private void setColor() 

     // some algorithm to pick the right color...
    if (...)
        int color = context.getResources().getColor(R.color.pale_blue);

    paint.setColor(color);


    /* 
     * algorithm to set size here...
     */

@Override
public void draw(Canvas canvas) 

    //draw circle in the middle of the TextView 
    canvas.drawCircle(textViewSize, textViewSize, circleSize, paint);

在我需要动态绘制圆圈的主代码中:

    final float scale = getApplicationContext().getResources().getDisplayMetrics().density;
    int pixels = (int) (107.0f * scale + 0.5f);
    skills.setWidth(pixels);
    skills.setHeight(pixels);
    skills.setBackground(new CircleDrawable(null, getApplicationContext()));

最后我得到了一堆不同形状和颜色的圆圈。

【讨论】:

好,但你不需要(构造函数中的Bitmap位图参数,你也不需要将drawable设置为ShapeDrawable,我认为这种问题被eclipse显示为警告 你完全正确。虽然它没有显示为警告。再次感谢:) 嘿,你可以在 ios 中做到这一点......但它需要大约 800 万行代码:)

以上是关于Android - 可绘制形状样式中的多种颜色和大小的主要内容,如果未能解决你的问题,请参考以下文章

Android Shape Drawable 改变属性

为具有可绘制形状的 EditText 视图设置样式,使其看起来类似于 Android < 3.0 的新全息主题

Android:具有可绘制资源的 ImageButton 引发 ResourceNotFoundException

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

Android 按钮使用相同的 Drawable 形状但使用不同的颜色

如何使用xml中的可绘制形状绘制半椭圆形(Android)