2016-09-14 21 views
1

ボタンを押すと画像が変わりますが、ボタンを離すと画像が変わります(画像は保持されません)。私はJavaプログラミングの初心者です。ボタンを押すと画像が変わり、ボタンの画像が変わっても変わりません。

マイレイアウト:

<Button 
    android:background="@drawable/volume" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true"/> 

そして、これは描画可能で、私のXMLです:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
    android:drawable="@drawable/volume_off" /> <!-- pressed --> 

<item android:drawable="@drawable/volume_on" /> <!-- default --> 

+0

本当に必要なものはToggleButton – RRTW

+0

だと思います。ありがとう、本当にありがとうございます。 –

答えて

0

ボタンをクリックしたときに永久にボタンのイメージを変更したい場合は、ボタンのonClick void内でプログラムで行うのが便利です。例えば イメージ1

場合:R.drawable.image_first 画像2:R.drawable.image_second

、あなたが持っているあなたのXMLレイアウトファイルで:あなたがすることができる活動で

<Button 
    android:background="@drawable/volume" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="click"/> 

public Class myActivity extends Activity{ 

Button mButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity_layout); 
    mButton = (Button) findViewById(R.id.button); 
} 

public void click(View v){ 
    mButton.setBackgroundResource(R.drawable.image_second); 
} 

} 

もう一度クリックして前の画像に戻る場合は、ボタンの状態を保存するだけです(ブール値のクリックed = true/false)、if文をpublic void clickの中に入れます。私MainActivity.java

public Class myActivity extends AppCompatActivity{ 

ボタンボリュームの私content_main.xml

<Button 
    android:id="@+id/button" 
    android:background="@drawable/volume_on" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="click" /> 

+0

yess、それは動作しますが、あなたが言ったように、前のイメージに戻ってきます。私はif文の中にすべきです、私は混乱しますif public if void if in bascom avr and arduino IDE、i easely理解することができますが、私は実際に理解していない,,,あなたは例文を与える場合は公式voidの文を... –

+0

ありがとうアレックス、あなたは私の一日を作った..:D –

0

あなたはセレクタ

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
android:drawable="@drawable/volume_off" /> <!-- pressed --> 
</selector> 

からデフォルトの画像を削除するには、これを削除ライン<!--<item android:drawable="@drawable/volume_on" /> remove default-->

ボタンの状態を変更すると、デフォルトに設定されます。

<Button 
android:background="@drawable/volume" 
android:layout_width="90dp" 
android:layout_height="90dp" 
android:src="@drawable/volume_on" 
android:layout_centerVertical="true" 
android:layout_centerHorizontal="true"/> 
+0

私はその行を削除するとボタンが見えなくなるので、ボタンを押したときにボタンが表示される(Volume_offを表示)、 –

1

あなたのケースでは、ボリュームインジケータを変更したいと思うので、私はこのようにプログラムで行うべきだと思います。

+0

私の質問に答えるためにQuangNguyenに感謝します。私は "isVolumeOn"とは分かりません。それはどういう意味ですか? あなたは私にもっと明確なサンプルプログラムを与えてもいいですか?申し訳ありません、私はここに新しいです。 –

+0

ありがとうQungNguyen、本当にありがたいです –

+0

あなたのアプリケーションでボリュームをオン/オフできる機能を追加していますか? –

0

。 boolean isPressed = false;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity_layout); 
    volume = (Button) findViewById(R.id.button); 
} 

public void click(View v){ 
if (isPressed) { 
    volume.setBackgroundResource(R.drawable.volume_off); 
    Toast.makeText(this, "Volume Off", 
      Toast.LENGTH_SHORT).show(); 
}else{ 
    volume.setBackgroundResource(R.drawable.volume_on); 
    Toast.makeText(this, "Volume On", 
      Toast.LENGTH_SHORT).show(); 
} 
    isPressed=!isPressed; 
}