Создать динамическое изображение - PullRequest
0 голосов
/ 18 января 2011

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

Другие изображения выбираются случайным образом из предварительно загруженного массива растровых изображений. Как это можно сделать?

1 Ответ

0 голосов
/ 21 июня 2011

Используйте массив Drawables, чтобы обернуть каждое из ваших изображений.В каждом экземпляре drawable укажите способ отображения этого изображения на холсте, переопределив метод onDraw.

Вы можете использовать класс LayerDrawable для управления всеми объектами рисования (он также предоставляет несколько полезных удобных методов).

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

Вот что я бы сделал:

1) Создайте мастер-класс, расширяющий View, он содержит массив рисованных объектов (которые на самом деле являются вашими изображениями) и вычисляет правильные координаты с учетом всех изображений.

2) Дайте ему конструктор, который принимает ваши отрисовки

3) Создайте класс (ы), расширяющий Drawable для ваших растровых изображений.Дайте ему 2 поля, одно с логическими размерами / координатами, другое с физическими размерами / координатами.Логические из них должны быть заполнены при построении, поскольку они просто считывают естественные пропорции растрового изображения.Физические будут заполнены позже.Методы onDraw этих классов должны использовать значения из физических координат.

4) Предоставить мастер-классу View большой уродливый математический метод, который учитывает все логические размеры изображений.Математический метод будет использовать их, а также размеры экрана, чтобы выяснить, какими должны быть физические размеры каждого изображения.

5) Заполните физические атрибуты каждого Drawable с помощью результатов математического метода.

6) Заставьте главный класс View 'onDraw произойти, добавив его в макет извне или вызвав invalidate (), если он уже есть в макете.

Надеюсь, это поможет

...