Ich habe ein Schulprojekt, wo ich versuche, eine Taschenlampe App gehen zu lassen. Für den On/Off ImageButton möchte ich 4 benutzerdefinierte Bilder haben.Wie programmiere ich programmgesteuert das ImageButton-src-Ziel, wenn eine Bedingung erfüllt ist?
Wenn Taschenlampe ist aus: -turn_on.png (default) -turn_on_pressing.png (Zustand gedrückt = true)
Wenn Taschenlampe auf: -turn_off.png (default) -turn_off_pressing.png (Zustand gedrückt = wahr)
Ich hoffe, das ImageButton src Ziel zu ändern, um zwischen "on_selector.xml" und "off_selector.xml" zu ändern. Ursprünglich war ich in der Lage, setImageResource()
die Standardschaltflächenbilder zu ändern. Und jetzt, da ich versuche, meine eigenen Bilder in die Presse einzufügen, habe ich eine sehr schwierige Zeit.
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>
Ist das, was ich tun möchte, sogar möglich oder gibt es einen anderen Weg, dies zu erreichen? Ich bin seit ungefähr 3 Stunden daran fest und kann die Antwort nirgendwo online finden (vielleicht nicht die richtige Frage?), So dass jede Hilfe geschätzt wird!
Danke!
Vielen Dank für die schnelle Antwort und Lösung. Das Festlegen der 'ImageButton' XML-Referenz in 'Hintergrund' statt 'src' machte den Unterschied. –