2016-10-21 7 views
7

shape drawablestrokeの部分的な重なりを防ぐ方法はありませんか?私は、形状の境界にストロークを完全に重ねることを好みます。ここで 形状引出しストロークの部分的な重なりを防ぐ

は私の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

を達成しているものです私はそれを100%にしたいと思っています。 ストローク矩形ための1つのための1 -

答えて

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を埋めていない場合?それに対応するストロークがないので。 –

+0

@EugenPechanecオフセットがない場合は、問題の結果が表示されます。緑の矩形は、ストロークの幅_の半分を開始します。そのため、この値で境界を拡大する必要があります( '_padding_'を引いて)。 –

+0

しかし、あなたのポストのポイントは、緑色の矩形*にストロークがないことです*したがって、それは利用可能な領域全体を埋めるので、負のオフセットは必要ありません、そうではありませんか? (つまり、20dp幅のストロークに対応するために緑色の矩形を20dpだけオフセットする必要がある場合、ストロークの下に緑を描画するには20-20 = 0dpのオフセットが必要です)。 –

関連する問題