ドローアブルフォルダに次のような形があります。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners Android:radius="5dp" />
<solid Android:color="#ffffff" />
<stroke Android:width="2dp" Android:color="#B5B5B5"/>
</shape>
これにより、角が丸い長方形が定義され、次のような任意のパネルに背景として適用できます:Android:background = "@ drawable/round_corner_shape"。
ここで質問があります。アプリケーションには背景と同じ形状のパネルがほとんどありませんが、形状ごとに異なる境界線(ストローク)の色が必要です。 3つのシェイプを作成したくありません。唯一の違いは、ストロークの色です。 実行時にストローク値を変更することは可能ですか?
私も同じ問題を抱えていました。私の場合、GridViewがあり、グリッド内のアイテムは、実行時にユーザーが境界線の色を変更できました。
そのため、そのグリッドのgridviewAdapterで、getViewメソッド(アダプターのビューを生成するメソッド)で次のことを行いました。
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.griditem, null);
GradientDrawable gradientDrawable = (GradientDrawable) convertView.getBackground();
gradientDrawable.setStroke(2, mColor);
convertView.invalidate();
return convertView;
}
mColorは、xmlファイルで行うのと同じように、色を表すintです。 Javaコードでは、「#」の代わりに「0x」を使用してAARRGGBB形式で定義します。たとえば、100%不透明なBLACKには0xFF000000を使用し、100%不透明なBLUEには0xFF0000FFを使用します。これは、google api'helpfully 'がintの色が「ストロークの色」であることを示しているためです。
これで私の問題は解決しました...あなたの場合にも同様のことを試すことができると思います。
こんにちは、実行時にバックグラウンドを作成してみてください。その後、いつでも変更できます。
RoundRectShape rect = new RoundRectShape(
new float[] {30,30, 30,30, 30,30, 30,30},
null,
null);
ShapeDrawable bg = new ShapeDrawable(rect);
bg.getPaint().setColor(0x99FFFFFF);
view.setBackgroundDrawable(bg);