Как программно изменить цель ImageButton src при выполнении условия?

У меня есть школьный проект, в котором я пытаюсь получить приложение для фонариков. Для включения / выключения ImageButton я хочу иметь 4 пользовательских изображения.

Если фонарик выключен: -turn_on.png (по умолчанию) -turn_on_pressing.png (состояние нажато = true)

Если включен фонарик: -turn_off.png (по умолчанию) -turn_off_pressing.png (состояние нажато = true)

Я надеюсь изменить цель ImageButton src для изменения между «on_selector.xml» и «off_selector.xml». Первоначально я смог setImageResource() изменить изображения кнопок по умолчанию. И теперь, когда я пытаюсь добавить свои собственные изображения на прессе, у меня очень трудное время.

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> 

Является ли то, что я хочу сделать, даже возможно, или есть другой способ сделать это? Я застрял на этом около 3 часов и не могу найти ответ в любом месте (возможно, не спрашивая правильный вопрос?), Поэтому любая помощь оценивается!

Благодаря!

Solutions Collecting From Web of "Как программно изменить цель ImageButton src при выполнении условия?"

Это требование, чтобы он был imageResource? Вместо этого вы можете попробовать использовать backgroundResource.

 ImageButton flashButtonOn = (ImageButton) findViewById(R.id.flashButtonOn); flashButtonOn.setBackgroundResource(R.drawable.on_selector); 

Или попробуйте

 flashButtonOn.setImageResource(R.drawable.replacementGraphic); 

Он должен быть «setImageResource», «setBackgroundResource» изменяет фон, а не src. btn_MyButton.setImageResource (R.drawable.button_bg_selector_collapsed);

При настройке изображения используйте следующий атрибут:

android:src="@drawable/on_selector"

Для динамического изменения изображения вам необходимо использовать следующее:

 ImageButton myButton = (ImageButton) findViewById(R.id.my_button); myButton.setImageResource(R.drawable.my_button_image);