レイヤーリストの仕組みがわかりません。私は公式の いくつかの例を含むドキュメント を読みましたが、期待どおりに機能しません。 1dpでパディングする必要がある4つの正方形が必要ですが、予期したとおりではありません。以下は、500%にスケーリングされたスクリーンショットです。
(間違った色は関係ありません)
ご覧のとおり、サイズが完全に間違っており、パディングが欠落しています。 Androidが必要なポイントを取得できるように、幅/高さや右/左/上/お尻などの実際の値を設定しようとしました。
これが私のxmlです:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:top="0dp" Android:left="0dp" Android:bottom="0dp" Android:right="0dp">
<shape Android:shape="rectangle">
<size Android:width="9dp"
Android:height="9dp"/>
<solid Android:color="#f000"/>
</shape>
</item>
<item Android:top="1dp" Android:left="1dp" Android:bottom="5dp" Android:right="5dp">
<shape Android:shape="rectangle">
<size Android:width="3dp"
Android:height="3dp"/>
<solid Android:color="#f00"/>
</shape>
</item>
<item Android:top="1dp" Android:left="5dp" Android:bottom="5dp" Android:right="1dp">
<shape Android:shape="rectangle">
<size Android:width="3dp"
Android:height="3dp"/>
<solid Android:color="#0f0"/>
</shape>
</item>
<item Android:top="5dp" Android:left="1dp" Android:bottom="1dp" Android:right="5dp">
<shape Android:shape="rectangle">
<size Android:width="3dp"
Android:height="3dp"/>
<solid Android:color="#0f0"/>
</shape>
</item>
<item Android:top="5dp" Android:left="5dp" Android:bottom="1dp" Android:right="1dp">
<shape Android:shape="rectangle">
<size Android:width="3dp"
Android:height="3dp"/>
<solid Android:color="#f00"/>
</shape>
</item>
</layer-list>
左、上、右、下の値は、それぞれのエッジから測定されます。
したがって、left = 0dp、top = 0dp、bottom = 0dp、right = 50dpは、(match_parent-50dp)幅で、50dp幅ではない長方形を与えます。したがって、「右」の値を大きくすると、実際には小さな長方形が表示されます。
同じことが他の値にも当てはまりますが、これらはほとんどの場合期待どおりに動作し、混乱を引き起こす可能性のある「正しい」だけです。
px
の代わりにdp
を使用するか、すべてのディメンションに10
を掛けます。
なぜこれが起こっているのか正確にはわからないが、1dp
が浮動px
値である密度と関係があると推測するImageView
は拡大されます。
専門家の回答は歓迎です:)