Страница 1 из 2

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

Добавлено: 03 фев 2014, 03:00
damager82
В этом уроке:
- получаем доступ к Canvas


Click here to read this article!

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

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

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

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

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

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

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

Добавлено: 04 фев 2014, 16:38
WizikTLT
Все это скорее всего из-за Алгоритма Брезенхэма - используется для рисования линий на экране.
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).

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

Добавлено: 05 фев 2014, 09:14
bladestorm
Спасибо, очень интересно было прочитать, особенно про алгоритм Брезенхэма.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 13 авг 2014, 19:08
alexmx
Я так думаю что это реально только по средствам работы с координатами? Или я неправ

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

Добавлено: 14 авг 2014, 15:44
Foenix
прав

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

Добавлено: 25 дек 2014, 18:36
fermopili
Все примеры в этом уроке и в последующих рассматривают рисование на всем экране, а как быть, если рисовать совать нужно не на всем , а на части экрана, а на другой части экрана необходимо расположить, кнопки, текст и др.
Я создал класс на котором и буду рисовать
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
что еще необходимо прописать и в чем ошибка?

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

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

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

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

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

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