Авто масштабирование текста в Canvas java - PullRequest
0 голосов
/ 13 февраля 2020

Я использую это, чтобы сделать значок уведомления на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...