2016-10-21 5 views
7

Есть ли способ предотвратить частичное перекрытие stroke на shape drawable. Я предпочитаю полностью перекрывать ход на границах формы.Предотвращение частичного перекрытия формы, выполняемой штрих-кодом

Вот мой XML

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <padding 
     android:bottom="0dp" 
     android:top="0dp" 
     android:left="0dp" 
     android:right="0dp" /> 
    <solid android:color="@color/green" /> 
    <stroke android:color="@color/red_50" 
     android:width="20dp" 
     android:dashGap="2dp" 
     android:dashWidth="10dp" /> 
</shape> 

colors.xml

<color name="green">#0f0</color> 
<color name="red_50">#8f00</color> 

А вот что достигается
Sample Image

Как вы можете видеть, что инсульт перекрывание твердая часть на 50%, но я хочу, чтобы она была на 100%.

ответ

6

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

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:bottom="@dimen/offset" 
     android:left="@dimen/offset" 
     android:right="@dimen/offset" 
     android:top="@dimen/offset"> 

     <shape android:shape="rectangle"> 
      <solid android:color="@color/green" /> 
     </shape> 

    </item> 

    <item> 

     <shape android:shape="rectangle"> 
      <stroke 
       android:width="20dp" 
       android:color="@color/red_50" 
       android:dashGap="2dp" 
       android:dashWidth="10dp" /> 
     </shape> 

    </item> 

</layer-list> 

Вы можете настроить смещение, чтобы получить внешний или внутренний ход.

Outer & inner stroke

Эти значения получены от разности размеров прозрачный прямоугольник (инсульт) и слой зеленого цвета. В вашем случае они будут 20dp или ни одного.

+0

В случае, если B не заполняет заполненный прямоугольник нулем? Так как нет инсульта для размещения. –

+0

@EugenPechanec Если смещения нет, мы получим результат, о котором идет речь, - зеленый прямоугольник начинается с ширины штриха. Вот почему мы должны увеличить его границы на это значение (вычитая «_padding_»). –

+0

Но весь смысл вашего сообщения в том, что зеленый прямоугольник * не имеет штриха *, поэтому он заполняет всю доступную область, поэтому не требует отрицательного смещения, не так ли? (I.e., если вам нужно компенсировать зеленый прямоугольник на 20dp, чтобы разместить его на 20dp, вам нужно 20-20 = 0dp offset, чтобы нарисовать зеленый под штрихом.) –