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

Ответить
iamtihonov
Сообщения: 41
Зарегистрирован: 20 сен 2012, 12:57

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

Сообщение iamtihonov » 19 ноя 2012, 20:52

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 ноя 2012, 21:19

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

iamtihonov
Сообщения: 41
Зарегистрирован: 20 сен 2012, 12:57

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

Сообщение iamtihonov » 19 ноя 2012, 21:24

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

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 20 ноя 2012, 17:39

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 )
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

iamtihonov
Сообщения: 41
Зарегистрирован: 20 сен 2012, 12:57

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

Сообщение iamtihonov » 21 ноя 2012, 01:12

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

Аватара пользователя
dens
Сообщения: 47
Зарегистрирован: 03 фев 2013, 00:14

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

Сообщение dens » 18 май 2013, 18:56

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

Nyashka
Сообщения: 40
Зарегистрирован: 19 мар 2013, 13:06

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

Сообщение Nyashka » 29 май 2013, 11:21

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

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

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

Сообщение xr0m » 29 май 2013, 22:03

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]
Последний раз редактировалось xr0m 29 май 2013, 22:07, всего редактировалось 1 раз.

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

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

Сообщение xr0m » 29 май 2013, 22:06

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

Ответить