Как добавить текст к изображению и сохранить как новое изображение - PullRequest
3 голосов
/ 19 января 2012

Я пытаюсь создать приложение для Android, которое добавляет к изображениям случайную цитату.

Общий процесс таков:

  1. Начните с заданного пользователем изображения, которое отображается при запуске приложения.
  2. Из этого изображения все, что пользователь может сделать, это нажать на него и сгенерировать новую случайную «цитату», которая будет наложена на изображение.
  3. Пользователь может сохранить вновь созданное изображение с выбранной им цитатой и установить его в качестве обоев.

Я дошел до того, что могу отобразить изображение в ImageView.

Мой список цитат хранится в моем strings.xml файле.

Ответы [ 3 ]

6 голосов
/ 19 января 2012

Я делаю что-то подобное в приложении. Используйте холст.

Я отредактировал часть своего кода, которая на самом деле добавляет пару других изображений на задний план и прочее.

Мясо с кодом:

private static Bitmap getPoster(...) {
    Bitmap background = BitmapFactory.decodeResource(res, background_id)
        .copy(Bitmap.Config.ARGB_8888, true);
    Canvas canvas = new Canvas(background);
    Typeface font = Typeface.createFromAsset(res.getAssets(), FONT_PATH);
    font = Typeface.create(font, Typeface.BOLD);
    Paint paint = new Paint();
    paint.setTypeface(font);
    paint.setAntiAlias(true);
    paint.setColor(Color.WHITE);
    paint.setStyle(Style.FILL);
    paint.setShadowLayer(2.0f, 1.0f, 1.0f, Color.BLACK);
    float fontSize = getFontSize(background.getWidth(), THE_QUOTE, paint); //You'll have to define a way to find a size that fits, or just use a constant size.

    paint.setTextSize(fontSize);
    canvas.drawText(THE_QUOTE, (background.getWidth() - paint.measureText(THE_QUOTE)) / 2,
        background.getHeight() - FILLER_HEIGHT, paint); //You might want to do something different. In my case every image has a filler in the bottom which is 50px. 
    return background;
}

Поместите свою собственную версию этого в класс и передайте ему идентификатор изображения и все остальное. Он возвращает растровое изображение, чтобы вы могли делать с ним все, что хотите (отобразить его в виде изображения, позволить пользователю сохранить его и установить как wallpape).

1 голос
/ 20 января 2012

Хорошо! Франческо, мой друг, у меня есть идея, хотя и не рабочий код (потому что я не очень хорош в этом). Итак, вот оно:

Реализация onClickListener() на вашем ImageView, как показано ниже:

ImageView iv = (ImageView)findViewById(R.id.imageview1);
iv.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
            /** When I say do your stuff here, I mean read the user input and set your wallpaper here. I'm sorry that I don't really know how to save/set the wallpaper */
        }
    });

Когда дело доходит до чтения пользовательского ввода / генерации случайных кавычек, вы можете сделать это:

Вы сказали, что у вас уже есть кавычки, сохраненные в файле strings.xml. Используя идентификаторы этих строк, я думаю, что вы можете реализовать сценарий switch, в котором используются java imports - java.util.Scanner и java.util.Random. В конечном счете, использование их в вашем ImageView onClickListener может / должно привести к желаемому результату.

Я знаю, что мой ответ слишком расплывчатый, но я слабо надеюсь, что он дал вам минутное представление о том, что вы можете реализовать. Я серьезно надеюсь, что есть лучшие ответы, чем это. Если нет, то я надеюсь, что это поможет вам, и я также надеюсь, что я не веду вас в неправильном направлении, так как это всего лишь предположение. Извините, но это все, что у меня есть.

1 голос
/ 19 января 2012

Я знаю, что сделал это для ПК с imagemagick несколько лет назад (сохранить изображение с текстом)

Похоже, что imagemagick был портирован на Android, поэтому я бы начал копаться в их документации.

https://github.com/lilac/Android-ImageMagick

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