Как нарисовать прямоугольник в Android заданного размера, который позиционирует себя в виде, к которому он добавлен? - PullRequest
2 голосов
/ 05 декабря 2011

Я понимаю, как рисовать, я формирую, я расширяю класс View и переопределяю onDraw, где я создаю новый ShapeDrawbale (Rectangle), который затем рисую на холсте:

    Rect rect = new Rect(x, y, x + width, y + height);
    shapeDrawable.setBounds(rect);
    shapeDrawable.getPaint().set(paint);
    shapeDrawable.draw(canvas);

Затем я хочу добавить это в представление, определенное в моем XML-макете «Деятельности». Я делаю это, получая дескриптор представления и вызывая:

innerLinear.addView(rectView); // where rectView is my custom class that extends View

Моя проблема в том, что при создании прямоугольника вы должны указать координаты X и Y.

Итак - как мне правильно расположить прямоугольник внутри innerLayout?

Должен ли я использовать границы innerLayout для создания прямоугольника? Если это так, когда я звоню innerLayout.getLeft() или innerLayout.getTop() и т. Д., Всегда возвращается 0 (я предполагаю, что макет еще не полностью завершен), так как мне это сделать?

Есть ли другой способ? Я чувствую, что мне здесь чего-то не хватает.

Любая помощь будет принята с благодарностью,

спасибо

1 Ответ

2 голосов
/ 05 декабря 2011

В методе onDraw вы можете использовать следующие apis:

Для x и y контрольная точка равна 0,0 по отношению к родительскому виду.

getWidth() // This is in View
getHeight() // This is in View

Когда выпозвоните выше apis в вашем CustomView, вы получите правильные размеры родительского представления, которое в вашем случае innerLayout.Теперь, если мне нужно будет покрыть всю область, я напишу что-то вроде:

Rect rect = new Rect(0, 0, getWidth(), getHeight());

Это заполнит ваш CustomView полностью.Как ваши 0, 0 отображаются на фактические координаты экрана, вы не беспокоитесь об этом.Как я уже говорил, точка зрения вашего взгляда - 0,0.И Android вычислит фактические координаты экрана.

Для дальнейших ссылок:

Пользовательские компоненты

Как Android рисует

...