我正在尝试为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"
提前致谢!!
答案 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()));
最后我得到了一堆不同形状和颜色的圆圈。