Android - drawable shape样式中的多个颜色和大小

3
我正在尝试为我的TextView设置圆形背景,因此我创建了以下样式形状。 但是,我需要多种颜色和多种大小(而textSize保持不变),因此我需要在样式中设置宽度/高度。
据我所知...图层列表将所有形状叠加在一起?因为我需要在不同位置调用它12次,所以似乎使用12个形状样式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"

提前感谢!!

2个回答

2

创建一个自定义的Drawable,这样你就可以有数百万种尺寸和颜色的组合:

class CircleDrawable extends Drawable {
...
}

谢谢!我按照你的建议创建了一个自定义的可绘制类。我在答案中发布了我的代码:D - Merelda

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接