2012-11-27 13 views
25

の変更形状境界線の色に私は私の描画可能なフォルダにこの形状を有している:ランタイム

<?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> 

これは、角の丸い四角形を定義し、私はこのような任意のパネルの背景として、それを適用することができます。アンドロイド:背景= "@ drawable/round_corner_shape"

私のアプリケーションでは、背景と同じ形のパネルはほとんどありませんが、それぞれの図形に対して異なる境界線(ストローク)が必要です。私は3つの図形を作成したくないですが、唯一の違いはストロークカラーです。 実行時にストローク値を変更することはできますか?

+0

thats考えてみたいこと、良い質問。 +1 –

答えて

1

こんにちは、実行時に背景を作成しようとすることができますし、必要に応じていつでも変更することができます。

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); 
+1

あなたの例では、私は自分の既存のXMLコードを使用しません。私はxml(または他の方法で、上記のすべてのパラメータを持つ)の形(コーナー半径、背景、ストローク幅)を定義し、必要に応じてストロークカラーのみを変更したいと思います。あなたが手伝ってくれれば、これは問題でした。 –

+1

が私のために働いた。コピー&ペーストの目的では、 'bg.getPaint()。setColor(0x99FFFFFF);' –

+2

は背景色で、ストロークではありません。 – lalitm

16

私は同じ問題を抱えていました。 私の場合、グリッド内の項目は、実行時にユーザーによって境界線の色が変更されるGridViewがありました。

ので、そのグリッドのgridviewAdapterに、私は(アダプター用のビューを生成し、1)

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はずっと同じように、色を表すintですGetViewメソッドで次のように行きました私たちはxmlファイルで行います。 Javaコードでは、 "#"の代わりに "0x"を使用してAARRGGBB形式で定義します。 たとえば、100%不透明BLACKでは0xFF000000、100%不透明BLUEでは0xFF0000FFを使用します。 google apiはintimeの色が「ストロークの色」であることを「有益に」示すので、ここで説明します。

これは私の問題を解決しました。私はあなたのケースでも同様のことを試すことができると思います。