Урок 141. Рисование. Доступ к Canvas
Урок 141. Рисование. Доступ к Canvas
В этом уроке:
- получаем доступ к Canvas
Click here to read this article!
- получаем доступ к Canvas
Click here to read this article!
Последний раз редактировалось damager82 29 май 2017, 23:18, всего редактировалось 5 раз.
-
- Сообщения: 4
- Зарегистрирован: 03 фев 2014, 14:53
Re: Урок 141. Рисование. Доступ к Canvas
Давно ждал уроков именно по графике.
Возник вопрос, может кто сталкивался уже с подобным. При использовании команд drawLine(x1, y1, x2, y2, paint) в которую указывают начало и конец линии, заметил, что он не доводит линию до конца. Т.е. по факту линию он проведёт в x1, y1, x2-1, y2-1. С прямоугольниками ситуация примерно такая же. Может быть есть метод, который бы делал так, чтобы не требовалось добавлять 1 к конечным координатам для получения нужного результата. Или придётся смириться с данным нюансом?
Надеюсь корректно описал проблему...
Возник вопрос, может кто сталкивался уже с подобным. При использовании команд drawLine(x1, y1, x2, y2, paint) в которую указывают начало и конец линии, заметил, что он не доводит линию до конца. Т.е. по факту линию он проведёт в x1, y1, x2-1, y2-1. С прямоугольниками ситуация примерно такая же. Может быть есть метод, который бы делал так, чтобы не требовалось добавлять 1 к конечным координатам для получения нужного результата. Или придётся смириться с данным нюансом?
Надеюсь корректно описал проблему...
Re: Урок 141. Рисование. Доступ к Canvas
Как то такого не приходилось замечать. Может ошибка в расчётах координат или же в особенности дивайса?bladestorm писал(а):Давно ждал уроков именно по графике.
Возник вопрос, может кто сталкивался уже с подобным. При использовании команд drawLine(x1, y1, x2, y2, paint) в которую указывают начало и конец линии, заметил, что он не доводит линию до конца. Т.е. по факту линию он проведёт в x1, y1, x2-1, y2-1. С прямоугольниками ситуация примерно такая же. Может быть есть метод, который бы делал так, чтобы не требовалось добавлять 1 к конечным координатам для получения нужного результата. Или придётся смириться с данным нюансом?
Надеюсь корректно описал проблему...
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 4
- Зарегистрирован: 03 фев 2014, 14:53
Re: Урок 141. Рисование. Доступ к Canvas
Тестил на эмуляторе. Если делать простую рисовалку или как был пример перетаскивания квадрата, то это не проявит себя, т.к. особо нет необходимости в такой точности.
У меня при помощи линий реализован эффект векторной графики и к примеру линия с координатами (х1, у1, х1, у1+2, paint) оказывалась реально в координатах (х1, у1, х1, у1+1, paint). Из-за чего не отображалось всё так как надо.
Мой английский не позволил мне на 100% понять, но http://stackoverflow.com/questions/8965 ... d-position, описан именно мой случай... как я понял ответа там нет
Может всё-таки кто-то сталкивался и сможет что-то пояснить
У меня при помощи линий реализован эффект векторной графики и к примеру линия с координатами (х1, у1, х1, у1+2, paint) оказывалась реально в координатах (х1, у1, х1, у1+1, paint). Из-за чего не отображалось всё так как надо.
Мой английский не позволил мне на 100% понять, но http://stackoverflow.com/questions/8965 ... d-position, описан именно мой случай... как я понял ответа там нет
Может всё-таки кто-то сталкивался и сможет что-то пояснить
Re: Урок 141. Рисование. Доступ к Canvas
Все это скорее всего из-за Алгоритма Брезенхэма - используется для рисования линий на экране.
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).
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).
-
- Сообщения: 4
- Зарегистрирован: 03 фев 2014, 14:53
Re: Урок 141. Рисование. Доступ к Canvas
Спасибо, очень интересно было прочитать, особенно про алгоритм Брезенхэма.
Re: Урок 141. Рисование. Доступ к Canvas
Добрый день! Можно узнать, будут ли уроки по SurfaceView более подробно или только вводная часть в этом уроке?
Заранее благодарю за ответ.
Заранее благодарю за ответ.
Re: Урок 141. Рисование. Доступ к Canvas
Да вроде не планировал. А про что там еще можно рассказать?Elysey писал(а):Добрый день! Можно узнать, будут ли уроки по SurfaceView более подробно или только вводная часть в этом уроке?
Заранее благодарю за ответ.
Re: Урок 141. Рисование. Доступ к Canvas
Хотелось бы узнать более подробно о работе с потоками при динамической прорисовке с использованием SurfaceView.damager82 писал(а):Да вроде не планировал. А про что там еще можно рассказать?Elysey писал(а):Добрый день! Можно узнать, будут ли уроки по SurfaceView более подробно или только вводная часть в этом уроке?
Заранее благодарю за ответ.
Re: Урок 141. Рисование. Доступ к Canvas
Добрый день! Подскажите пожалуйста, а как, на примере этого урока, залить зеленым цветом не весь экран,а только определенную его часть??
Re: Урок 141. Рисование. Доступ к Canvas
Можно path нарисовать зеленой заливкой.Elysey писал(а):Добрый день! Подскажите пожалуйста, а как, на примере этого урока, залить зеленым цветом не весь экран,а только определенную его часть??
Либо у канвы есть методы clip*.
Re: Урок 141. Рисование. Доступ к Canvas
А как сделать чтоб на половине экрана проходила отрисовка, а на другой располагались элементы управления (например, кнопки)?damager82 писал(а):Можно path нарисовать зеленой заливкой.Elysey писал(а):Добрый день! Подскажите пожалуйста, а как, на примере этого урока, залить зеленым цветом не весь экран,а только определенную его часть??
Либо у канвы есть методы clip*.
Re: Урок 141. Рисование. Доступ к Canvas
Растянуть View, в котором рисуешь, не на весь экран, а на часть экрана.Elysey писал(а): А как сделать чтоб на половине экрана проходила отрисовка, а на другой располагались элементы управления (например, кнопки)?
Re: Урок 141. Рисование. Доступ к Canvas
Доброго времени суток.
А как обратиться к отрисованному обьекту, например кликнуть по линии или по кругу после чего что нибудь происходило бы?
А как обратиться к отрисованному обьекту, например кликнуть по линии или по кругу после чего что нибудь происходило бы?
Re: Урок 141. Рисование. Доступ к Canvas
Я так думаю что это реально только по средствам работы с координатами? Или я неправ
Re: Урок 141. Рисование. Доступ к Canvas
прав
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 141. Рисование. Доступ к Canvas
Все примеры в этом уроке и в последующих рассматривают рисование на всем экране, а как быть, если рисовать совать нужно не на всем , а на части экрана, а на другой части экрана необходимо расположить, кнопки, текст и др.
Я создал класс на котором и буду рисовать
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
что еще необходимо прописать и в чем ошибка?
Я создал класс на котором и буду рисовать
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
Ошибку нашел, вместо graphAcc необходимо указать полное имя - com.XXX.YYY.ZZZ.graphAcc
Re: Урок 141. Рисование. Доступ к Canvas
Здравствуйте. Спасибо за содержательные уроки. У меня возник вопрос: можно ли создать две наложенных друг на друга canvas? Рисовании на верхней canvas (у которой фон прозрачен) не изменяет содержимое нижней (фоновой). У меня на есть движущийся объект - и не хотелось бы при каждом его перемещении перерисовывать фон.
Re: Урок 141. Рисование. Доступ к Canvas
Уже разобрался. Делаю два наложенных друг на друга DrawView (с помощью FrameLayout) - и получаю два независимых canvas. А вообще наипростейшую анимацию удобнее делать с помощью Animation для Drawable (который я делая как в уроке 167).