Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 21 сен 2017, 02:42

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Урок 143. Рисование. Path
СообщениеДобавлено: 17 фев 2014, 04:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.

В этом уроке:


- работаем с Path




Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 29 май 2017, 23:19, всего редактировалось 8 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 143. Рисование. Path
СообщениеДобавлено: 17 фев 2014, 14:50 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
У меня с этим drawPath связаны самые болезненные воспоминания. Дело в том, что drawPath может в какой-то момент взять и перестать рисовать линию. Хотя нет, он будет её рисовать, но невидимую. Если выставить к примеру ему заливку, то заливку будет видно, а вот саму линию нет. Теперь более подробно:
Есть такой параметр getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
так вот, он с API 11. Если его выставить, то с устройствами API которых >=11, проблем не возникает. Проблемы возникают когда API<11. У нас drawPath попросту перестает работать. Canvas отказывалась отрисовывать. Если убрать этот параметр, то всё нормально. Я не смог понять природу этого глюка, но я потратил около недели, дабы понять причину неработоспособности. Спрашивается, причем тут drawPath и ActionBar? Понятия не имею. Я изучил исходники, дошел до нативного кода, занимался дебаггингом, но ничего не нашел. Дальше начал изучать нативный код Canvas, но вот отдебажить его уже не представлялось возможности. Дальше начал писать с нуля приложение на подобие нашего, добавлять потихоньку функционал. Сначала грешил на баги в osmdroid, грешил на баги либы ActionBar v7, на проблемы фрагментов во фрагментах, но вот путь джедая вывел меня на этот параметр.
Да, он с API 11, но не всегда это можно заметить, а он проглатывает этот параметр, не указывая нам никаких ошибок.

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 143. Рисование. Path
СообщениеДобавлено: 18 фев 2014, 21:44 

Зарегистрирован: 18 фев 2014, 21:36
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
http://developer.android.com/guide/topics/graphics/hardware-accel.html
"Beginning in Android 3.0 (API level 11), the Android 2D rendering pipeline supports hardware acceleration"

можно посмотреть как меняется Canvas.isHardwareAccelerated() от включения ActionBar


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 143. Рисование. Path
СообщениеДобавлено: 19 фев 2014, 08:41 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Если это на мое сообщение, то это никак не влияло на проблему. Hardware acceleration порождало другую проблему в этом случае, но порождало если мне память не изменяло на версиях API>=14, и связано было с отключенной опцией. Тут другая проблема была.

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 143. Рисование. Path
СообщениеДобавлено: 24 мар 2014, 09:15 
Аватар пользователя

Зарегистрирован: 29 июн 2013, 14:45
Сообщений: 4
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Хотел бы немножко отметить по поводу "Домашнего задания" в данном уроке:

"В качестве задания предлагаю вам вспомнить Урок 102 про касания и сделать приложение, в котором будет нарисована прямая, а касаясь экрана пальцем ее можно будет искривлять в сторону точки касания"

Как ни старался, а при помощи onTouch() замутить такую операцию у меня не получилось. Помогло следующее:

Код: [ Загрузить ] [ Скрыть ]
  1. class DrawView extends View { 
  2.  
  3.     //переменные для координат 
  4.     float x = 0; 
  5.     float y = 0; 
  6.          
  7.     //прямо в классе DrawView реализуем метод onTouchEvent() без присвоения OnTouchListener,  
  8.     //затем вызываем invalidate(), который, в сою очередь,     вызовет onDraw()     
  9.     @Override 
  10.         public boolean onTouchEvent(MotionEvent event) {             
  11.             if(event.getAction() == MotionEvent.ACTION_DOWN){ 
  12.                 x = event.getX(); 
  13.                 y = event.getY(); 
  14.                 invalidate(); 
  15.             } 
  16.             return true; 
  17.         } 

У кого получилось сделать это при помощи onTouch() - огромная просьба отписать


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 143. Рисование. Path
СообщениеДобавлено: 09 мар 2016, 16:02 

Зарегистрирован: 09 мар 2016, 15:59
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Все получилось. Примерно так. Здесь dv - это сохраненная ссылка на объект DrawView.
Код: [ Загрузить ] [ Скрыть ]
  1.     @Override 
  2.     public boolean onTouch(View v, MotionEvent event) { 
  3.         dv.point1.set( 
  4.                 Float.valueOf(event.getX()).intValue(), 
  5.                 Float.valueOf(event.getY()).intValue() 
  6.         ); 
  7.         dv.invalidate(); 
  8.         return true; 
  9.     } 


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB