Shape drawableをxmlではなくJavaコードで動的に生成する

  • 33
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。
background_shape.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <stroke android:width="3dp" android:color="#FF0000FF" />
  <corners android:radius="3dp" />
  <solid android:color="#660000FF" />
</shape>

これと同等なものを動的に生成しようとしてはまる

float[] outerR = new float[] { 3, 3, 3, 3, 3, 3, 3, 3 }; // dp -> px の処理はひとまず置いておく
ShapeDrawable drawable = new ShapeDrawable(new RoundRectShape(outerR, null, null));
drawable.getPaint().setColor(Color.parseColor("#FF0000FF"));
drawable.setSolidColor(Color.parseColor("#660000FF")); // こんなメソッドは無い!!

http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

ドキュメントを読むと、shapeで記述されたxmlはShapeDrawableではなくGradientDrawableへのresource pointerだと書いてあるので、以下が正しい。

GradientDrawable drawable = new GradientDrawable();
drawable.setStroke(3, Color.parseColor("#FF0000FF"));
drawable.setCornerRadius(3);
drawable.setColor(Color.parseColor("#660000FF"));