Рисование линии с определенной шириной пикселя - PullRequest
10 голосов
/ 16 апреля 2011

Я хотел бы отобразить данные X / Y на холсте, используя линии определенной ширины (в пикселях или в идеале "dp").Я пробовал setStrokeWidth (..) метод Paint, и это действительно меняет ширину линии, но это не то, что мне нужно.В моем случае я масштабировал свой холст до «реальных инженерных единиц» с использованием matrix.preScale (xScale, yScale), поэтому масштаб X представляет от 0 до 100, а Y - от 0 до 1. Кажется, что метод setStrokeWidth () объекта Paintустановить ход так, чтобы он соответствовал моим настройкам матрицы preScale ().Другими словами, горизонтальные линии нарисованы очень тонкими, а вертикальные линии - очень толстыми.

Есть ли способ настроить Paint так, чтобы независимо от того, в каком направлении была нарисована линия, ее ширина соответствовала числупикселей?

Я попытался определить Drawable, которое является линией, и сделать ShapeDrawable из этого, а затем применить его к Paint, но столкнулся с некоторыми неприятными ошибками приведения классов во время выполнения.Это заставило меня думать, что это был неправильный путь.Но, может быть, я сдался слишком рано.

Я понимаю, что доступно несколько пакетов Android для построения графиков / диаграмм, некоторые с исходным кодом, но я действительно хочу понять платформу здесь, а не использовать третийпартийное решение.

Спасибо за любые подсказки!Рич

Ответы [ 2 ]

11 голосов
/ 14 июня 2011

Например на Android: paint.setStrokeWidth (3); Этот метод устанавливает ширину линии. В этом случае ширина линии составляет 3 пикселя. Я ищу так же, как этот метод на BlackBerry.

Попробуйте это:

    Graphics.setColor(Color.RED);
    Graphics.setStrokeWidth(20);
    Graphics.drawRect(0, 0, 100, 100);

Они доступны в пакете net.rim.device.api.ui.Graphics.

0 голосов
/ 22 июля 2011

При рисовании наложений на карту я должен был сделать нечто подобное.

Поскольку пользователь может использовать мультитач для динамического масштабирования карты, когда я вхожу в процедуру рисования, я рассчитываю коэффициент масштабирования для осей x и y, применяю его к холсту, рисую карту, затем инвертирую этот коэффициент масштабирования. и примените его к ширине линии для наложений. Таким образом, холст масштабируется, а оверлеи масштабируются, а затем масштабируются, поэтому они фактически имеют фиксированную ширину.

Я обнаружил, что это работает очень хорошо без реального снижения производительности.

...