2021/07/17

Android の Stroke を特定の辺だけにする

【Android】特定の辺だけにstrokeをつけたい にあるように、特定の辺の stroke を実現するにはコードでの実装が必要という認識だったのですが、最近になって InsetDrawable が XML で使用できることを知って1、これを使えば XML だけで stroke を消せるのではないかと思い、やってみました。

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<inset android:insetbottom="-6dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <shape>
        <stroke
                android:width="5dp"
                android:color="#FF0000" />
        <solid android:color="#DDDDDD" />
        <corners
                android:topLeftRadius="15dp"
                android:topRightRadius="15dp" />
    </shape>
</inset>

Bottom だけ消してみたら以下のような感じになりました。 注意点としては、inset に入れる値が strokewidth と全く同じだと、場合によっては表示されてしまう場合があること2。少し大きめの値を指定しましょう。

その気になって探してみると、既に情報は出ていました。

Open-sided Android stroke? - Stack Overflow

  1. というより、InsetDrawable の存在を知った 
  2. 丸め込み誤差のせいだと思われる 
?

0 件のコメント: