Android - 多种颜色&尺寸采用可绘制的造型

时间:2013-07-19 20:30:55

标签: android xml styles drawable shape

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

根据我的理解.. Layer List将所有形状放在一起?因为我需要在不同的地方调用它12次,所以拥有12个形状样式的xmls似乎相当麻烦。

有没有更好的方法在一个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:width="84dp"
        android:height="84dp" />
</shape>

在布局xml中调用:

android:background="@drawable/skills_circle"

提前致谢!!

2 个答案:

答案 0 :(得分:2)

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

class CircleDrawable extends Drawable {
...
}

答案 1 :(得分:1)

所以我按照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()));

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

相关问题