Comment puis-je modifier par programmation la ImageButton src cible lorsqu'une condition est remplie?

J'ai un projet d'école, où je suis en train d'essayer d'obtenir une lampe de poche app va. Pour le on/off ImageButton, je veux avoir 4 images personnalisées.

Si la lampe s'éteint:
-turn_on.png (valeur par défaut)
-turn_on_pressing.png (état enfoncé = true)

Si la lampe de poche est sur:
-turn_off.png (valeur par défaut)
-turn_off_pressing.png (état enfoncé = true)

Je suis l'espoir de changer le ImageButton src cible pour changer entre "on_selector.xml" et "off_selector.xml". À l'origine, j'ai été en mesure de setImageResource() pour changer le bouton par défaut des images. Et maintenant que je suis en train d'ajouter mon propre sur les images de presse, je vais avoir un moment très difficile.

Application.java:

import android.app.Activity;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Bundle;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.view.View;
import android.widget.ImageButton;
import com.jrr.flashlight.R;
public class Application extends Activity {
ImageButton flashControl;
Camera camera;
Parameters params;
private boolean hasFlash;
private boolean isFlashOn = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.application_layout);
flashControl = (ImageButton) findViewById(R.id.flashButtonOn);
flashControl.setOnClickListener(flashControlListener());
hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);  //sets value for boolean hasFlash
}
private View.OnClickListener flashControlListener() {
return new View.OnClickListener(){
@Override
public void onClick(View v) {
if (!isFlashOn){
findViewById(R.id.appbackground).setBackgroundColor(Color.WHITE);
if(hasFlash){
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
}
isFlashOn = true;
} else {
findViewById(R.id.appbackground).setBackgroundColor(Color.BLACK);
if(hasFlash){
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
}
isFlashOn = false;
}
}
};
}
@Override
protected void onResume() {
super.onResume();    
camera = Camera.open();
params = camera.getParameters();
}
@Override
protected void onPause() {
super.onPause();    
if(camera!=null) {
camera.release();
camera = null;
}
findViewById(R.id.appbackground).setBackgroundColor(Color.BLACK);
}

application_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/appbackground"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp"
android:layout_margin="0dp"
android:background="#000000">
<ImageButton
android:background="#80000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<!--I want to be able to change the following line-->
android:src="@drawable/on_selector"
android:id="@+id/flashButtonOn" android:layout_gravity="center"/>
</LinearLayout>

on_selector.xml:

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

off_selector.xml:

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

Est ce que je veux faire encore possible ou est-il une autre façon d'accomplir cette? J'ai été coincé sur ce pendant environ 3 heures, et ne peut pas trouver la réponse en ligne n'importe où (peut-être pas poser la bonne question?) de sorte que toute aide est très appréciée!

Merci!

OriginalL'auteur John Riggs | 2013-06-16