最近遇到一个项目,需要设置非常多不同颜色的小标签:
等等;
这种情况很多同学第一反应肯定是写xml来定义shape完成这样的样式;
可是他们没有想过,如果非常多的颜色的时候,那都要为每一份颜色写一个xml文件吗?当然,这样的代码是没法让人接受的。
笔者在这样的情况下尝试了很多种写法:
1.重写TextView, 在onDraw中重新生成一份Bitmap来作为背景。但是效果不如人意
public void setBackgroundRounded(int w, int h, View v)
{
DisplayMetrics metrics = getResources().getDisplayMetrics();
double dH = (metrics.heightPixels / 100) * 1.5;
int iHeight = (int)dH;
iHeight = mCornerSize;
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
paint.setAntiAlias(true);
paint.setColor(mBgColor);
// paint.setColor(mContext.getResources().getColor(R.color.blue));
RectF rec = new RectF(0, 0, w, h);
c.drawRoundRect(rec, iHeight, iHeight, paint);
v.setBackgroundDrawable(new BitmapDrawable(getResources(), bmp));
}
2、通过xml中定义的shape=“rectangle”,那么猜想一定是通过xxx Shape来实现的,于是写了如下代码:
float[] outerR = new float[]{radius, radius, radius, radius, radius, radius,