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 - 可绘制形状样式中的多种颜色和大小的主要内容,如果未能解决你的问题,请参考以下文章
为具有可绘制形状的 EditText 视图设置样式,使其看起来类似于 Android < 3.0 的新全息主题
Android:具有可绘制资源的 ImageButton 引发 ResourceNotFoundException