Android правильный способ рисования вектора с шириной штриха

#android #xml #android-layout #android-drawable #vector-graphics

#Android #xml #android-макет #android-drawable #векторная графика

Вопрос:

Привет, я пытаюсь использовать вектор, который можно рисовать в моем приложении для Android.

Вот xml для того же

 <vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="1024dp"
    android:height="1024dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
    <path
        android:pathData="M 0,0 L 50,0 L 50,50 z"
        android:strokeColor="#000000" />
</vector>
  

и вот как это выглядит без какой-либо ширины обводки
введите описание изображения здесь

Если я добавлю android:strokeWidth=»10″, вот как это выглядит введите описание изображения здесь

Ширина стока не согласована (одинаковая ширина) по всем строкам, и крайняя левая точка, похоже, не обрезана

Есть ли какой-либо способ, с помощью которого все 3 нарисованные линии будут согласованными (одинаковой ширины), а не нерегулярными?

Комментарии:

1. Из того, что я вижу, проблема в том, что вы рисуете в верхнем левом углу (0,0), из-за чего одна сторона обводки обрезается до края области просмотра.

2. Как установить обводку для <clip-path> ?

Ответ №1:

Представьте, что рисуемый объект представляет собой систему координат с точкой p (0,0), находящейся в верхнем левом углу. Ваша ось x проходит от верхнего левого угла к верхнему правому, а ваша ось y проходит от верхнего левого угла к нижнему левому.

Когда вы создаете путь, он переходит из одной точки в другую точку в системе координат. Когда вы обводите этот путь, нарисованная линия имеет strokeWidth значение, равное 1 по умолчанию. Но когда вы устанавливаете ширину, скажем, 10, тогда линия в вашей системе координат намного толще, но куда должна идти эта «Толщина», если ваш путь, например, уже равен y = 0? В drawable не будут отображаться отрицательные координаты. Вот почему ваш чертеж был обрезан.

Решение: добавьте strokeWidth к координатам, которые меньше strokeWidth вычтите strokeWidth из координат, которые больше ваших viewportWidth-strokeWidth , и / или viewportHeight-strokeWidth укажите интервал для краев, которые находятся на границах вашего окна просмотра (в этом примере дополнительный интервал в 3 подойдет)

Итак, ваш код должен выглядеть следующим образом:

 <?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="1024dp"
    android:height="1024dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
    <path
        android:pathData="M 13,13 L 50,13 L 50,50 z"
        android:strokeColor="#000000"
        android:strokeWidth="10"/>
</vector>
  

Комментарии:

1. Спасибо за решение, это работает, было интересно, есть ли какое-либо общее решение, которое работает для сложного объекта, поскольку я имел в виду, что был предоставлен векторный ресурс в xml, можем ли мы использовать один и тот же xml с разной шириной обводки без изменения базового объекта

2. Как установить обводку для <clip-path> ?