2012-05-04 11 views
0

アプリの実行中にJavaコードで四角形(xmlで描画)の色を変更することはできますか?アプリの実行中にXMLシェイプの色を変更する

マイrectangle.xml:

によってmain.xmlに描かれ
<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape"> 
    <stroke android:width="2dp" android:color="#ffffff" /> 
    <padding android:left="20dp" 
     android:top="20dp" 
     android:right="20dp" 
     android:bottom="20dp" /> 

    <solid android:color="#006600" /> 
</shape> 

:私はこの方法を試してみた

<View 
    android:id="@+id/myRectangleView" 
    android:layout_width="wrap_content" 
    android:layout_height="100dp" 
    android:background="@drawable/rectangle"/> 

GradientDrawable sd; 
    View viewrectangle; 
    viewrectangle = (View) findViewById(R.id.myRectangleView); 
    sd = (GradientDrawable) viewrectangle.getBackground(); 
    sd.setColor(0xffffff00); 
    sd.invalidateSelf(); 

私が入れたときにのみ動作しますそれはOnCreateメソッドの内部にあります。

私はボタンでrect色を変更したいので、このコードをボタンのonClick()メソッドの中に入れます。しかし、アプリを実行しているときにボタンをクリックすると、色は変わりません。助言がありますか?

+1

た場合を以下のいずれかの答えがあなたの問題を解決したか、それを解決するのに役立ちました。その答えの横にあるチェックマークをクリックして、それを受け入れられた回答とし、著者のクレジットを与えてください。 – Barak

答えて

0

あなたは)別の方法でこのコードを入れて、ボタンのonClickのから呼び出すことができる方法..

2

はこのコードを使用し、それが働いていた、あるいは(viewrectangle.invalidateを使用してviewrectangleを再描画を検討することができますが、それはnescarryすべきではない:あなたは大腸を試みることができる

<Button android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:text="Button" 
     android:onClick="doClick"/> 
0

: "doClick()" メソッドはmain.xmlに設定されている。この例では

View viewrectangle; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    viewrectangle = (View) findViewById(R.id.myRectangleView); 

} 

public void doClick(View v) { 
    GradientDrawable sd = (GradientDrawable) viewrectangle.getBackground(); 
    sd.setColor(0xffffff00); 
    sd.invalidateSelf(); 
} 

rフィルタ。私はボタンの色を変更する前にそれを使用しました(標準的な灰色で始まっていることに注意してください)。別の色から始めれば、非常に異なる結果になる可能性があります。とにかく、私はそれをやった方法の例:

インポートPorterDuffグラフィックのもの:クラスで

import android.graphics.PorterDuff; 

カラーフィルタにしたい項目を定義し、フィルタ設定:

Button atdButton = (Button) convertView.findViewById(R.id.attendbutton); 

    if (atdState[position].equals("P")) { 
     atdButton.getBackground().setColorFilter(0xFF00FF00, // Set filter to green 
       PorterDuff.Mode.MULTIPLY); 
    } else if (atdState[position].equals("T")) { 
     atdButton.getBackground().setColorFilter(0xFFFFFF00, // Set filter to yellow 
       PorterDuff.Mode.MULTIPLY); 
    } else if (atdState[position].equals("E")) { 
     atdButton.getBackground().setColorFilter(0xFFFF6600, // Set filter to orange 
       PorterDuff.Mode.MULTIPLY); 
    } else if (atdState[position].equals("U")) { 
     atdButton.getBackground().setColorFilter(0xFFFF0000, // Set filter to red 
       PorterDuff.Mode.MULTIPLY); 
    } else { 
     atdButton.getBackground().clearColorFilter(); 
    } 
関連する問題