带有 Android Lollipop 等字母的 Android QuickContactBadge
Posted
技术标签:
【中文标题】带有 Android Lollipop 等字母的 Android QuickContactBadge【英文标题】:Android QuickContactBadge with letters like Android Lollipop 【发布时间】:2015-01-20 20:08:00 【问题描述】:我有一个联系人列表,我想在每个联系人的 QuickContactBadge 中显示他姓名的第一个字母。 我可以在运行时创建图像吗?
这就像 android Lollipop,其中联系人和拨号器使用带有字母的 QuickContactBadge:
【问题讨论】:
github.com/amulyakhare/TextDrawable 【参考方案1】:我使用一个函数来生成这些图像。
public static Bitmap generateCircleBitmap(Context context, int circleColor, float diameterDP, String text)
final int textColor = 0xffffffff;
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float diameterPixels = diameterDP * (metrics.densityDpi / 160f);
float radiusPixels = diameterPixels/2;
// Create the bitmap
Bitmap output = Bitmap.createBitmap((int) diameterPixels, (int) diameterPixels,
Bitmap.Config.ARGB_8888);
// Create the canvas to draw on
Canvas canvas = new Canvas(output);
canvas.drawARGB(0, 0, 0, 0);
// Draw the circle
final Paint paintC = new Paint();
paintC.setAntiAlias(true);
paintC.setColor(circleColor);
canvas.drawCircle(radiusPixels, radiusPixels, radiusPixels, paintC);
// Draw the text
if (text != null && text.length() > 0)
final Paint paintT = new Paint();
paintT.setColor(textColor);
paintT.setAntiAlias(true);
paintT.setTextSize(radiusPixels * 2);
Typeface typeFace = Typeface.createFromAsset(context.getAssets(),"fonts/Roboto-Thin.ttf");
paintT.setTypeface(typeFace);
final Rect textBounds = new Rect();
paintT.getTextBounds(text, 0, text.length(), textBounds);
canvas.drawText(text, radiusPixels - textBounds.exactCenterX(), radiusPixels - textBounds.exactCenterY(), paintT);
return output;
我将联系人的姓名传递给以下 getMaterialColor 函数以选择颜色。
private static List<Integer> materialColors = Arrays.asList(
0xffe57373,
0xfff06292,
0xffba68c8,
0xff9575cd,
0xff7986cb,
0xff64b5f6,
0xff4fc3f7,
0xff4dd0e1,
0xff4db6ac,
0xff81c784,
0xffaed581,
0xffff8a65,
0xffd4e157,
0xffffd54f,
0xffffb74d,
0xffa1887f,
0xff90a4ae
);
public static int getMaterialColor(Object key)
return material.get(Math.abs(key.hashCode()) % materialColors.size());
【讨论】:
好答案。帮助了我,谢谢。对于谁将使用此代码。小心“字体/Roboto-Thin.ttf”。它不适用于 API 16 及更低版本。所以,你需要手动添加。以上是关于带有 Android Lollipop 等字母的 Android QuickContactBadge的主要内容,如果未能解决你的问题,请参考以下文章
如何在带有 Android 5.0 Lollipop 的代码(不是 xml)中以编程方式使用 RippleDrawable?
适用于移动和电视的 Android 通用应用程序 (Lollipop)