Урок 142. Рисование. Простые фигуры, текст

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 142. Рисование. Простые фигуры, текст

Сообщение damager82 » 10 фев 2014, 03:00

В этом уроке:
- рисуем фигуры
- выводим текст


Click here to read this article!
Последний раз редактировалось damager82 29 май 2017, 23:19, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

underworlddemon
Сообщения: 7
Зарегистрирован: 07 май 2013, 22:23

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение underworlddemon » 11 фев 2014, 17:42

Напишу пару вещей, которые очень мне помогли и которые крайне сложно гуглятся "в лоб"

Очень часто по умолчанию создаётся неизменяемый Bitmap, но это не всегда удобно. Например вам надо немного изменить и пересоздавать объект крайне не выгодно (особенно при обработке фото). Тут и поможет вожможность менять настройки Bitmap (ХХХХХ.inMutable = true).

Код: Выделить всё

BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig=Bitmap.Config.ARGB_8888;
                options.inMutable = true;
                myBitmap = BitmapFactory.decodeByteArray(data,0,data.length, options);
Задание смешивания цветов при рисовании объектов одного поверх другого

Код: Выделить всё

Xfermode Xfermode =  new PorterDuffXfermode(PorterDuff.Mode.ADD);
                Paint.setXfermode(Xfermode);
Строка в Манифесте для запроса увеличенного лимита памяти, что очень важно при работе с Bitmap особенно большого размера (например фото)

Код: Выделить всё

android:largeHeap="true"
Последнюю вещь запишите где-то в сносках в уроках посвящённых графике и фото.
Ибо далеко не очевидная, но очень нужная вещь.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение damager82 » 12 фев 2014, 10:54

Про PorterDuffXfermode-режимы и Bitmap-ключи обязательно расскажу, чуть позже, после основ.
Про android:largeHeap упомяну в разговоре о Bitmap, спасибо!
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

BlizzedRu
Сообщения: 8
Зарегистрирован: 12 янв 2014, 19:15

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение BlizzedRu » 12 фев 2014, 17:24

Как можно сохранить результат в png, например?

underworlddemon
Сообщения: 7
Зарегистрирован: 07 май 2013, 22:23

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение underworlddemon » 12 фев 2014, 23:34

BlizzedRu писал(а):Как можно сохранить результат в png, например?
http://developer.android.com/reference/ ... tStream%29
http://developer.android.com/reference/ ... ormat.html
т.е. задать пару параметров и скомандовать compress
итоговый стрим записать в файл ;-)

Код: Выделить всё

File sdPath = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + AppDir);
FileOutputStream FileOutputStream = new FileOutputStream (sdPath, true);
Bitmap.compress(Bitmap.CompressFormat.JPEG, 90, FileOutputStream);
FileOutputStream.close();
Bitmap.recycle();
для png замени jpeg в коде выше
последние две строки закрывают поток и уничтожают bitmap

bladestorm
Сообщения: 4
Зарегистрирован: 03 фев 2014, 14:53

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение bladestorm » 13 фев 2014, 07:45

Кстати, если делать Bitmap.compress(Bitmap.CompressFormat.PNG, 90, FileOutputStream), то на сколько я понял параметр сжатия не важен. А если делать формат JPEG, то параметр сжатия не желательно ставить равным 0, иначе может что-то упасть. По крайней мере у меня такое было.

underworlddemon
Сообщения: 7
Зарегистрирован: 07 май 2013, 22:23

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение underworlddemon » 13 фев 2014, 14:20

bladestorm писал(а):Кстати, если делать Bitmap.compress(Bitmap.CompressFormat.PNG, 90, FileOutputStream), то на сколько я понял параметр сжатия не важен. А если делать формат JPEG, то параметр сжатия не желательно ставить равным 0, иначе может что-то упасть. По крайней мере у меня такое было.
для PNG документация говорит об игнорировании параметра сжатия
а для JPEG существует сжатие 0 ? :?

BlizzedRu
Сообщения: 8
Зарегистрирован: 12 янв 2014, 19:15

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение BlizzedRu » 13 фев 2014, 15:47

Спасибо за подсказки!
Еще вопрос: что делать, если мне нужно совместить элементы xml и вот эту графику?
Например, нужно текстовое поле обычное, а под ним графика

Sunnar
Сообщения: 3
Зарегистрирован: 15 фев 2014, 23:21

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение Sunnar » 15 фев 2014, 23:45

Здравствуйте! Для моего приложения понадобилась такая функция, которая "оставляет след", когда водишь пальцем по экрану. Я попытался реализовать это так: при обработке касания записываются его координаты в массив, а в методе OnDraw вызываю DrawPoints, которому на вход подаю этот массив, а в конце вызываю invalidate(), для перерисовки. Дело в том, что при быстром ведении пальцем по экрану этот след начинает обрываться, след не сплошной, как будто не хватает скорости обработки касания либо отрисовки. А в приложении с гугл плей всё нормально рисуется. Как можно сделать так, чтобы был сплошной след? Может SurfaceView использовать? Может это из-за массива, но какую функцию вызывать в этом случае, ведь onDraw делает перерисовку?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение damager82 » 25 фев 2014, 21:02

Посмотрите этот пример: http://www.java2s.com/Code/Android/2D-G ... ntView.htm.
Метод touchMove, там чел использует кривые для ровного рисования.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Sunnar
Сообщения: 3
Зарегистрирован: 15 фев 2014, 23:21

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение Sunnar » 26 фев 2014, 15:13

Спасибо, я нашел пример, который переделал под себя: http://habrahabr.ru/post/154193/ Ваш пример я тоже обязательно посмотрю.

aluxus
Сообщения: 1
Зарегистрирован: 05 мар 2014, 01:39

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение aluxus » 05 мар 2014, 02:12

Здравствуйте! А возмжно-ли наложить две канвы?

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение _ILYA_ » 13 мар 2014, 18:27

а как рисовать треугольники?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение altwin » 13 мар 2014, 18:46

_ILYA_ писал(а):а как рисовать треугольники?
[syntax=java5]
super.draw(canvas, mapView, true);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setStrokeWidth(2);
paint.setColor(android.graphics.Color.RED);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Point point1_draw = new Point();
Point point2_draw = new Point();
Point point3_draw = new Point();

mapView.getProjection().toPixels(point1, point1_draw);
mapView.getProjection().toPixels(point2, point2_draw);
mapView.getProjection().toPixels(point3, point3_draw);

Path path = new Path();
path.setFillType(Path.FillType.EVEN_ODD);
path.moveTo(point1_draw.x,point1_draw.y);
path.lineTo(point2_draw.x,point2_draw.y);
path.lineTo(point3_draw.x,point3_draw.y);
path.lineTo(point1_draw.x,point1_draw.y);
path.close();

canvas.drawPath(path, paint);

//canvas.drawLine(point1_draw.x,point1_draw.y,point2_draw.x,point2_draw.y, paint);

return true;
[/syntax]
or
[syntax=java5]
private static final int verticesColors[] = {
Color.LTGRAY, Color.LTGRAY, Color.LTGRAY, 0xFF000000, 0xFF000000, 0xFF000000
};
float verts[] = {
point1.x, point1.y, point2.x, point2.y, point3.x, point3.y
};
canvas.drawVertices(Canvas.VertexMode.TRIANGLES, verts.length, verts, 0, null, 0, verticesColors, 0, null, 0, 0, new Paint());
[/syntax]
or:
[syntax=java5]
private void drawArrows(Point[] point, Canvas canvas, Paint paint) {

float [] points = new float[8];
points[0] = point[0].x;
points[1] = point[0].y;
points[2] = point[1].x;
points[3] = point[1].y;
points[4] = point[2].x;
points[5] = point[2].y;
points[6] = point[0].x;
points[7] = point[0].y;

canvas.drawVertices(VertexMode.TRIANGLES, 8, points, 0, null, 0, null, 0, null, 0, 0, paint);
Path path = new Path();
path.moveTo(point[0].x , point[0].y);
path.lineTo(point[1].x,point[1].y);
path.lineTo(point[2].x,point[2].y);
canvas.drawPath(path,paint);

}
[/syntax]
Изображение

Criterion
Сообщения: 1
Зарегистрирован: 08 май 2014, 20:12

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение Criterion » 08 май 2014, 20:16

Помогите исправить код так чтобы фигуры строились по размеру экрана, а не по определенным точкам. Сколько чего не перепробовал ничего не получилось рабочего. Квадрат отказывался прорисовываться.

Можно не весь код переделать, а просто на примере квадрата продемонстрировать(взять размер экрана, разделить на два и получившиеся значения подставить в координаты).

ryabos
Сообщения: 1
Зарегистрирован: 06 июн 2014, 15:22

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение ryabos » 06 июн 2014, 15:24

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение alexmx » 27 окт 2014, 13:50

Доброго времени суток

А как рисовать рандомное количество фигур, а не фиксированное в методе onDraw?
Или же это по принципу нарисовал фигурку сохранил битмап, загрузил битмап нарисовал другую фигурку и тд?

Masi4
Сообщения: 8
Зарегистрирован: 10 окт 2013, 16:54

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение Masi4 » 29 окт 2014, 17:03

Доброго времени!

А подскажите как, используя потоковый способ, рисовать "по запросу"?
Нажал кнопку 1 - нарисовал одну группу фигур.
Нажал кнопку 2 - нарисовал другую группу фигур.
И т.д.

Спасибо!

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение alexmx » 02 ноя 2014, 12:48

Masi4 писал(а):Доброго времени!

А подскажите как, используя потоковый способ, рисовать "по запросу"?
Нажал кнопку 1 - нарисовал одну группу фигур.
Нажал кнопку 2 - нарисовал другую группу фигур.
И т.д.

Спасибо!
if или switch

kirka_scant
Сообщения: 42
Зарегистрирован: 18 дек 2013, 14:54

Re: Урок 142. Рисование. Простые фигуры, текст

Сообщение kirka_scant » 03 дек 2014, 23:51

А как рисовать пальцем кривую произвольной формы? Про линии и другие графические примитивы было рассказано хорошо.
Как потом это сохранить с тем, чтобы открыть как документ, а не картинку? Можно ли хранить объекты в SQLite? Как? Я умею там хранить только числа и строки.

Ответить