Урок 141. Рисование. Доступ к Canvas

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

Урок 141. Рисование. Доступ к Canvas

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

В этом уроке:
- получаем доступ к Canvas


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

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

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение bladestorm » 03 фев 2014, 15:01

Давно ждал уроков именно по графике.
Возник вопрос, может кто сталкивался уже с подобным. При использовании команд drawLine(x1, y1, x2, y2, paint) в которую указывают начало и конец линии, заметил, что он не доводит линию до конца. Т.е. по факту линию он проведёт в x1, y1, x2-1, y2-1. С прямоугольниками ситуация примерно такая же. Может быть есть метод, который бы делал так, чтобы не требовалось добавлять 1 к конечным координатам для получения нужного результата. Или придётся смириться с данным нюансом?
Надеюсь корректно описал проблему...

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение rezak90 » 03 фев 2014, 15:26

bladestorm писал(а):Давно ждал уроков именно по графике.
Возник вопрос, может кто сталкивался уже с подобным. При использовании команд drawLine(x1, y1, x2, y2, paint) в которую указывают начало и конец линии, заметил, что он не доводит линию до конца. Т.е. по факту линию он проведёт в x1, y1, x2-1, y2-1. С прямоугольниками ситуация примерно такая же. Может быть есть метод, который бы делал так, чтобы не требовалось добавлять 1 к конечным координатам для получения нужного результата. Или придётся смириться с данным нюансом?
Надеюсь корректно описал проблему...
Как то такого не приходилось замечать. Может ошибка в расчётах координат или же в особенности дивайса?
R.id.team
Политика на форуме запрещена

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

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение bladestorm » 03 фев 2014, 15:36

Тестил на эмуляторе. Если делать простую рисовалку или как был пример перетаскивания квадрата, то это не проявит себя, т.к. особо нет необходимости в такой точности.
У меня при помощи линий реализован эффект векторной графики и к примеру линия с координатами (х1, у1, х1, у1+2, paint) оказывалась реально в координатах (х1, у1, х1, у1+1, paint). Из-за чего не отображалось всё так как надо.
Мой английский не позволил мне на 100% понять, но http://stackoverflow.com/questions/8965 ... d-position, описан именно мой случай... как я понял ответа там нет :(
Может всё-таки кто-то сталкивался и сможет что-то пояснить

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение WizikTLT » 04 фев 2014, 16:38

Все это скорее всего из-за Алгоритма Брезенхэма - используется для рисования линий на экране.
http://ru.wikipedia.org/wiki/%D0%90%D0% ... 0%BC%D0%B0
Точно не могу ответить - но судя из текста какраз эта единичка вычитается для уменьшения значение ошибки.

Также нечто похожее описано в тикете https://code.google.com/p/android/issue ... l?id=63006
Если коротко то при передаче линий с целочисленными координатами есть баг с их отрисовкой.

как вариант предлагают сделать view.setLayerType(LAYER_TYPE_SOFTWARE, null).

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

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение bladestorm » 05 фев 2014, 09:14

Спасибо, очень интересно было прочитать, особенно про алгоритм Брезенхэма.

Elysey
Сообщения: 5
Зарегистрирован: 17 фев 2014, 23:57

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Elysey » 18 фев 2014, 00:01

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

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

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение damager82 » 25 фев 2014, 20:57

Elysey писал(а):Добрый день! Можно узнать, будут ли уроки по SurfaceView более подробно или только вводная часть в этом уроке?
Заранее благодарю за ответ.
Да вроде не планировал. А про что там еще можно рассказать?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Elysey
Сообщения: 5
Зарегистрирован: 17 фев 2014, 23:57

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Elysey » 01 мар 2014, 15:16

damager82 писал(а):
Elysey писал(а):Добрый день! Можно узнать, будут ли уроки по SurfaceView более подробно или только вводная часть в этом уроке?
Заранее благодарю за ответ.
Да вроде не планировал. А про что там еще можно рассказать?
Хотелось бы узнать более подробно о работе с потоками при динамической прорисовке с использованием SurfaceView.

Elysey
Сообщения: 5
Зарегистрирован: 17 фев 2014, 23:57

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Elysey » 15 мар 2014, 18:41

Добрый день! Подскажите пожалуйста, а как, на примере этого урока, залить зеленым цветом не весь экран,а только определенную его часть??

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

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение damager82 » 17 мар 2014, 23:00

Elysey писал(а):Добрый день! Подскажите пожалуйста, а как, на примере этого урока, залить зеленым цветом не весь экран,а только определенную его часть??
Можно path нарисовать зеленой заливкой.
Либо у канвы есть методы clip*.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Elysey
Сообщения: 5
Зарегистрирован: 17 фев 2014, 23:57

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Elysey » 20 мар 2014, 00:51

damager82 писал(а):
Elysey писал(а):Добрый день! Подскажите пожалуйста, а как, на примере этого урока, залить зеленым цветом не весь экран,а только определенную его часть??
Можно path нарисовать зеленой заливкой.
Либо у канвы есть методы clip*.
А как сделать чтоб на половине экрана проходила отрисовка, а на другой располагались элементы управления (например, кнопки)?

Snik
Сообщения: 22
Зарегистрирован: 11 сен 2013, 16:42

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Snik » 25 мар 2014, 14:28

Elysey писал(а): А как сделать чтоб на половине экрана проходила отрисовка, а на другой располагались элементы управления (например, кнопки)?
Растянуть View, в котором рисуешь, не на весь экран, а на часть экрана.

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

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение alexmx » 13 авг 2014, 18:21

Доброго времени суток.
А как обратиться к отрисованному обьекту, например кликнуть по линии или по кругу после чего что нибудь происходило бы?

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

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение alexmx » 13 авг 2014, 19:08

Я так думаю что это реально только по средствам работы с координатами? Или я неправ

Аватара пользователя
Foenix
Сообщения: 4200
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Foenix » 14 авг 2014, 15:44

прав
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

fermopili
Сообщения: 9
Зарегистрирован: 26 дек 2012, 23:32

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение fermopili » 25 дек 2014, 18:36

Все примеры в этом уроке и в последующих рассматривают рисование на всем экране, а как быть, если рисовать совать нужно не на всем , а на части экрана, а на другой части экрана необходимо расположить, кнопки, текст и др.
Я создал класс на котором и буду рисовать
public class graphAcc extends View
{
**************
}
в файл разметки main.xml вставил следующие строки
<graphAcc
android:id="@+id/graphAcc1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

однако при выполнении программы возникает ошибка и в лог выдает Error inflatting class graphAcc c указанием строки начала описания в main.xml
что еще необходимо прописать и в чем ошибка?

fermopili
Сообщения: 9
Зарегистрирован: 26 дек 2012, 23:32

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение fermopili » 28 дек 2014, 17:51

Ошибку нашел, вместо graphAcc необходимо указать полное имя - com.XXX.YYY.ZZZ.graphAcc

Mr. Snail
Сообщения: 2
Зарегистрирован: 18 окт 2015, 23:48

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Mr. Snail » 19 окт 2015, 00:03

Здравствуйте. Спасибо за содержательные уроки. У меня возник вопрос: можно ли создать две наложенных друг на друга canvas? Рисовании на верхней canvas (у которой фон прозрачен) не изменяет содержимое нижней (фоновой). У меня на есть движущийся объект - и не хотелось бы при каждом его перемещении перерисовывать фон.

Mr. Snail
Сообщения: 2
Зарегистрирован: 18 окт 2015, 23:48

Re: Урок 141. Рисование. Доступ к Canvas

Сообщение Mr. Snail » 23 окт 2015, 22:39

Уже разобрался. Делаю два наложенных друг на друга DrawView (с помощью FrameLayout) - и получаю два независимых canvas. А вообще наипростейшую анимацию удобнее делать с помощью Animation для Drawable (который я делая как в уроке 167).

Ответить