3

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

据我了解..图层列表将所有形状放在一起?因为我需要在不同的地方调用 12 次,所以有 12 个 shape 样式的 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:width="84dp"
        android:height="84dp" />
</shape>

通过以下方式在布局 xml 中调用:

android:background="@drawable/skills_circle"

提前致谢!!

4

2 回答 2

2

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

class CircleDrawable extends Drawable {
...
}
于 2013-07-19T20:54:06.327 回答
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()));

最后我得到了一堆不同形状和颜色的圆圈。 在此处输入图像描述

于 2013-07-19T22:44:58.430 回答