Пользовательские размеры представления Android и координаты холста

У меня есть собственный вид, который должен рисовать растровое изображение. Я создал простую линию (BMP 1x50 пикселей), чтобы проверить, где именно она будет нарисована. В моем onDraw(Canvas c) я использую эту строку кода:

canvas.drawBitmap(bitmap, 0, 0, paint);

Где краска - это простой объект Paint, без каких-либо причудливых настроек. Проблема в том, что эта линия отображается посередине изображения, а не сверху, как я думал.

Я устанавливаю свойства просмотра в макете xml:

<com.example.CustomView
    android:id="@+id/costom_view"
    android:layout_width="230px"
    android:layout_height="188px"
    android:layout_marginTop="10px"
    custom:srcDraw="@drawable/menu_indicators_level_draw_up" />

Это настраиваемое свойство является идентификатором растрового изображения, которое я использую для рисования на холсте.

Почему View не работает должным образом? И почему мой холст имеет размер 800x450 (размер экрана, я полагаю), а не 230x188, как я определил в макете?

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


person Prettygeek    schedule 23.01.2014    source источник
comment
не могли бы вы опубликовать свой метод onDraw   -  person    schedule 23.01.2014
comment
В onDraw() я рисую только эту одну линию, как я уже упоминал, есть только canvas.drawBitmap(bitmap, 0, 0, paint);, растровое изображение инициализируется из ресурсов в конструкторе, а также paint = new Paint(), вот и все.   -  person Prettygeek    schedule 23.01.2014


Ответы (1)


Я думаю, что вы должны использовать для рисования линии над растровым изображением следующее:

drawLine(float startX, float startY, float stopX, float stopY, Paint paint) 

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

Надеюсь, это поможет .

person Community    schedule 23.01.2014
comment
Хорошо, это хорошее начало, это нарисовано правильно, я обнаружил, что мое растровое изображение линии было неправильно утоплено (это была линия шириной в 1 поксель, но я использовал больший фон, прозрачный), поэтому изображение было не 1x50, а 50x50. Это вызывает разницу в размерах и координатах. - person Prettygeek; 23.01.2014
comment
Да, спасибо за вашу помощь. Теперь я правильно создал растровое изображение, и все работает нормально. Ваш ответ правильный, но он не решил мою проблему (если бы я хотел изменить цвет строки, мне пришлось бы изменить код, в моем случае я могу изменить файл только в папке res). - person Prettygeek; 23.01.2014