LoginSignup
72
71

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-12-31

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

72
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
71