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

Урок 143. Рисование. Path

Добавлено: 17 фев 2014, 04:00
damager82
В этом уроке:
- работаем с Path


Click here to read this article!

Re: Урок 143. Рисование. Path

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

Re: Урок 143. Рисование. Path

Добавлено: 18 фев 2014, 21:44
hsw
http://developer.android.com/guide/topi ... 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
Mikhail_dev
Если это на мое сообщение, то это никак не влияло на проблему. Hardware acceleration порождало другую проблему в этом случае, но порождало если мне память не изменяло на версиях API>=14, и связано было с отключенной опцией. Тут другая проблема была.

Re: Урок 143. Рисование. Path

Добавлено: 24 мар 2014, 09:15
dmitriy4leex
Хотел бы немножко отметить по поводу "Домашнего задания" в данном уроке:

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

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

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

class DrawView extends View {

	//переменные для координат
	float x = 0;
	float y = 0;
		
	//прямо в классе DrawView реализуем метод onTouchEvent() без присвоения OnTouchListener, 
	//затем вызываем invalidate(), который, в сою очередь,	 вызовет onDraw()	
	@Override
		public boolean onTouchEvent(MotionEvent event) {			
			if(event.getAction() == MotionEvent.ACTION_DOWN){
		    	x = event.getX();
				y = event.getY();
				invalidate();
			}
			return true;
		}
У кого получилось сделать это при помощи onTouch() - огромная просьба отписать

Re: Урок 143. Рисование. Path

Добавлено: 09 мар 2016, 16:02
lightstar
Все получилось. Примерно так. Здесь dv - это сохраненная ссылка на объект DrawView.

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

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        dv.point1.set(
                Float.valueOf(event.getX()).intValue(),
                Float.valueOf(event.getY()).intValue()
        );
        dv.invalidate();
        return true;
    }