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")); // こんなメソッドは無い!!
ドキュメントを読むと、shape
で記述されたxmlはShapeDrawable
ではなくGradientDrawable
へのresource pointerだと書いてあるので、以下が正しい。
GradientDrawable drawable = new GradientDrawable();
drawable.setStroke(3, Color.parseColor("#FF0000FF"));
drawable.setCornerRadius(3);
drawable.setColor(Color.parseColor("#660000FF"));