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

как нарисовать фигуру произвольной формы?

Добавлено: 19 ноя 2012, 20:52
iamtihonov
использую Canvas но не нашел метода по которому я смог бы нарисовать бы фигуру произвольного размера, к примеру используя массив точек. как мне такое сделать подскажите?

Re: как нарисовать фигуру произвольной формы?

Добавлено: 19 ноя 2012, 21:19
AndreyI
У самого класса Canvas много методов для рисования, в данном случае есть метод drawLines
http://developer.android.com/reference/android/graphics/Canvas.html#drawLines(float[], android.graphics.Paint)

Re: как нарисовать фигуру произвольной формы?

Добавлено: 19 ноя 2012, 21:24
iamtihonov
этот метод я видел, проблема в том что область внутри должна быть к примеру зеленым цветом, а как её потом зарисовать не знаю.

Re: как нарисовать фигуру произвольной формы?

Добавлено: 20 ноя 2012, 17:39
damager82
iamtihonov писал(а):этот метод я видел, проблема в том что область внутри должна быть к примеру зеленым цветом, а как её потом зарисовать не знаю.
Можно использовать android.graphics.Path
Пример 5-угольника

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

Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.GREEN);
				
Path path = new Path();
path.moveTo(120, 30);
path.lineTo(210, 90);
path.lineTo(180, 180);
path.lineTo(60, 180);
path.lineTo(30, 90);
path.lineTo(120, 30);
path.close();
				
canvas.drawPath(path, paint);
Только создание объектов Paint и Path, разумеется, вынесите из метода onDraw )

Re: как нарисовать фигуру произвольной формы?

Добавлено: 21 ноя 2012, 01:12
iamtihonov
Спасибо большое, а то что то не получилось загуглить этот вопрос, с английским плохо у меня( а так рисовал график который мне нужен через треугольник нарисованный линиями и прямоугольник)

Re: как нарисовать фигуру произвольной формы?

Добавлено: 18 май 2013, 18:56
dens
Извиняюсь за оффтопик, но есть вопрос по теме.
Создавал тут тему (viewtopic.php?f=32&t=1972) но мне там никто так и не ответил.
Решил рисовать через обычный View с переопределённым onDraw.
Есть сложность: пока не понял, как нарисовать область, бОльшую экрана, по которой можно перемещаться, водя пальцем (типа как в приложениях с картами всяческими). Задал и вью, и RelativeLayout (корневой элемент в xml-исходнике моего фрагмента) setScrollContainer(true), а он всё равно не даёт ничего там перемещать. Там что-то ещё надо задавать?

Re: как нарисовать фигуру произвольной формы?

Добавлено: 29 май 2013, 11:21
Nyashka
Подскажите пожалуйста, работает ли clipPath() с аппаратным ускорением. Ибо path.addCircle(x,y,r,ccw); с последующим c.clipPath(path); выделяет квадратную область вместо окружности, в то время как без АУ выделяется именно окружность. Заранее спасибо
P.S. В примере уважаемого damager82 используется c.drawPath(); который отлично работает, но не подходит потому что не дает поместить текстуру в выделенную область

Re: как нарисовать фигуру произвольной формы?

Добавлено: 29 май 2013, 22:03
xr0m
Nyashka писал(а):не дает поместить текстуру в выделенную область
попробуй Shader, тут для узора с повторениями код.
[syntax=java]
paint = new Paint(Paint.FILTER_BITMAP_FLAG);
Shader shader = new BitmapShader(bitmap, Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);
paint .setShader(shader);
[/syntax]

Re: как нарисовать фигуру произвольной формы?

Добавлено: 29 май 2013, 22:06
xr0m
dens писал(а): Решил рисовать через обычный View с переопределённым onDraw....
Попробуй дать для канвас ширину больше экрана, только зачем? Ты сдвигаешь, перерисовывается канвас, отсюда эффект сдвига. Но оно не за экраном. ИМХО