【Android】特定の辺だけにstrokeをつけたい

  • 52
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

CSSでいうところのborder-leftborder-topのようなもの.
Androidでやるには一筋縄ではいかなかった.

やりかた

方針

  1. GradientDrawablestrokeをつける
  2. LayerDrawableに前項のGradientDrawableをセットする
  3. stroke不要な辺ネガティブオフセット をつけてstrokeを描画領域から追い出す

このとき,オフセットの値はstrokeの太さより大きくする必要がある.

実装

CSSでいうとこんな感じのやつをつくる.

border-top: 2px solid #ffffff;
border-bottom: 2px solid #ffffff;

Java

private int BORDER_WEIGHT = 2;

/* 中略 */

// 白(半透明),太さ2pxのボーダーをつける
GradientDrawable borderDrawable = new GradientDrawable();
borderDrawable.setStroke(BORDER_WEIGHT, 0x55ffffff);

// LayerDrawableにボーダーを付けたDrawableをセット
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{borderDrawable});
// ボーダーがいらない辺にオフセット(負値)をつける
layerDrawable.setLayerInset(0, 0, -BORDER_WEIGHT, 0, -BORDER_WEIGHT);

// ボーダーを付けたいViewにセットする
view.setBackground(layerDrawable);

XML

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:left="-1dp" android:right="-1dp">
      <shape>
            <solid android:color="@android:color/transparent" />
            <stroke android:width="1dp" android:color="#55ffffff" />
      </shape>
    </item>

</layer-list>

参考URL