我想用字母显示图像,gmail app如下图所示.

所有这些图像都是要保存在可绘制文件夹中的图像,还是将它们绘制成图形square shapes,然后将字母绘制到它们中?以下是我到目前为止动态做的事情.我只是一个方形.有人可以建议在gmail应用程序中实现的方式吗?
GradientDrawable gd = new GradientDrawable();
gd.mutate();
gd.setColor(getResources().getColor(gColors[i]));
button.setBackgroundDrawable(gd);
Run Code Online (Sandbox Code Playgroud)
Amu*_*are 23
更新2:
我修复了一些错误并将代码作为开源库发布在:https://github.com/amulyakhare/TextDrawable.它还包括您可能想要查看的一些其他功能.

旧答案:
我建议你使用下面的类CharacterDrawable(只需复制粘贴):
public class CharacterDrawable extends ColorDrawable {
private final char character;
private final Paint textPaint;
private final Paint borderPaint;
private static final int STROKE_WIDTH = 10;
private static final float SHADE_FACTOR = 0.9f;
public CharacterDrawable(char character, int color) {
super(color);
this.character = character;
this.textPaint = new Paint();
this.borderPaint = new Paint();
// text paint settings
textPaint.setColor(Color.WHITE);
textPaint.setAntiAlias(true);
textPaint.setFakeBoldText(true);
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextAlign(Paint.Align.CENTER);
// border paint settings
borderPaint.setColor(getDarkerShade(color));
borderPaint.setStyle(Paint.Style.STROKE);
borderPaint.setStrokeWidth(STROKE_WIDTH);
}
private int getDarkerShade(int color) {
return Color.rgb((int)(SHADE_FACTOR * Color.red(color)),
(int)(SHADE_FACTOR * Color.green(color)),
(int)(SHADE_FACTOR * Color.blue(color)));
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// draw border
canvas.drawRect(getBounds(), borderPaint);
// draw text
int width = canvas.getWidth();
int height = canvas.getHeight();
textPaint.setTextSize(height / 2);
canvas.drawText(String.valueOf(character), width/2, height/2 - ((textPaint.descent() + textPaint.ascent()) / 2) , textPaint);
}
@Override
public void setAlpha(int alpha) {
textPaint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter cf) {
textPaint.setColorFilter(cf);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用它很简单:new CharacterDrawable('A', 0xFF805781);通过传递字符和颜色值(示例Color.RED或其他颜色为十六进制0xFF805781):
ImageView imageView = (ImageView) findViewById(R.id.imageView);
CharacterDrawable drawable = new CharacterDrawable('A', 0xFF805781);
imageView.setImageDrawable(drawable);
Run Code Online (Sandbox Code Playgroud)
或根据您的问题:
CharacterDrawable drawable = new CharacterDrawable('A', 0xFF805781);
button.setBackgroundDrawable(drawable);
Run Code Online (Sandbox Code Playgroud)
该drawable会的规模,以适应的大小ImageView.结果将是:

更新:更新了添加深色阴影边框的代码(根据填充颜色自动选择深色阴影).
1)STROKE_WIDTH根据您对边界厚度的需求更改值.
2)更改SHADE_FACTOR边框黑暗的值.如果SHADE_FACTOR很小(例如0.2f),边框将变暗,反之亦然.
注意:您可以轻松改变角色的大小和字体