获得像gmail应用程序的方形图像

Ano*_*noo 5 android image

我想用字母显示图像,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),边框将变暗,反之亦然.

注意:您可以轻松改变角色的大小和字体