私が達成しようとしているのは、内部にいくつかのレイヤーを持つDrawableを使用することですが、実行時にグラデーションのstartColorなどのいくつかの値を制御します。Android - ShapeDrawableをプログラムで定義する方法
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#FF000000" />
<solid android:color="#FFFFFFFF" />
</shape>
</item>
<item android:top="1dp" android:bottom="1dp">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#FF000000" />
<gradient
android:startColor="#FFFFFFFF"
android:centerColor="#FFFFFF88"
android:endColor="#FFFFFFFF"
android:gradientRadius="250"
android:centerX="1"
android:centerY="0"
android:angle="315"
/>
</shape>
</item>
</layer-list>
をそして、私はmMyImageView.setBackgroundResource(R.drawable.my_layered_shape)を使用する場合、それは動作します:ここで私はmy_layered_shape.xmlに持っているものです。 色々な色の値を取得する方法がある限り、私は必要があればxmlを分割しても構いません。私がプログラム的に考えているコンセプト(つまり、このxmlと同じコードを実行する際のベストショット)は次のとおりです。
Drawable[] layers = new Drawable[2];
ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
sd1.getPaint().setColor(0xFFFFFFFF);
sd1.getPaint().setStyle(Style.STROKE);
sd1.getPaint().setStrokeWidth(1);
// sd1.getPaint().somehow_set_stroke_color?
ShapeDrawable sd2 = new ShapeDrawable(new RectShape());
sd2.getPaint().setColor(0xFF000000);
sd2.getPaint().setStyle(Style.STROKE);
// sd2.getPaint().somehow_set_stroke_color?
// sd2.getPaint().somehow_set_gradient_params?
layers[0] = sd1;
layers[1] = sd2;
LayerDrawable composite = new LayerDrawable(layers);
mMyImageView.setBackgroundDrawable(composite);
ありがとうございます。
不思議なことに、GradientDrawableクラスには「setPadding」メソッドがありません。 – Palani
優秀、それは私の問題を解決した – Goofy