Я использую это, чтобы сделать значок уведомления на android, который должен обеспечивать скорость загрузки / выгрузки. Основная проблема в том, что иногда текст go выходит из канвы и обрезается. Я пробовал несколько вещей, чтобы предотвратить это, но безуспешно.
Вот мой код для этого, без всех этих модификаций, он имеет размеры c.
private Paint iconUpperString, iconBottomString;
private Bitmap iconBitmap;
private Canvas iconCanvas;
private void setupIndicatorIconGenerator() {
iconUpperString = new Paint();
iconUpperString.setColor(Color.WHITE);
iconUpperString.setAntiAlias(true);
iconUpperString.setTextAlign(Paint.Align.CENTER);
iconUpperString.setTypeface(Typeface.create("sans-serif-condensed", Typeface.BOLD));
iconBottomString = new Paint();
iconBottomString.setColor(Color.WHITE);
iconBottomString.setAntiAlias(true);
iconBottomString.setTextAlign(Paint.Align.CENTER);
iconBottomString.setTypeface(Typeface.create("sans-serif-condensed", Typeface.BOLD));
iconBitmap = Bitmap.createBitmap(96, 96, Bitmap.Config.ARGB_8888);
iconCanvas = new Canvas(iconBitmap);
}
private Icon getIndicatorIcon(String upperString, String bottomString) {
// Set icon font size based on the state
// Trying to not overlap the frame
if (notificationIconType == 3) {
iconUpperString.setTextSize(42);
iconBottomString.setTextSize(42);
iconCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
iconCanvas.drawText(upperString, 48, 42, iconUpperString);
iconCanvas.drawText(bottomString, 48, 92, iconBottomString);
} else {
iconUpperString.setTextSize(60);
iconBottomString.setTextSize(40);
iconCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
iconCanvas.drawText(upperString, 48, 48, iconUpperString);
iconCanvas.drawText(bottomString, 48, 92, iconBottomString);
}
return Icon.createWithBitmap(iconBitmap);
}
Первый Часть вызывается только один раз для настройки, вторая вызывается каждую секунду и обновляет значок. Что мне нужно, так это динамическое c масштабирование, основанное на размере текста и не выходящее за рамки холста 96x96.