2013-06-16 16 views
12

私は懐中電灯アプリを手に入れようとしている学校プロジェクトがあります。オン/オフのImageButtonには、4つのカスタム画像が必要です。懐中電灯が消灯している場合条件が満たされたときにImageButton srcターゲットをプログラムで変更するにはどうすればよいですか?

: -turn_on.png(デフォルト) -turn_on_pressing.png(状態=真押下)

懐中電灯がオンの場合: -turn_off.png(デフォルト) -turn_off_pressing.png (state pressed = true)

"on_selector.xml"と "off_selector.xml"の間で変更するImageButton srcターゲットを変更したいと考えています。もともと私は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時間このままで立ち往生しており、どこからでも答えを見つけることができません(正しい質問をしていないかもしれません)。

ありがとうございます!

答えて

17

imageResourceである必要がありますか?代わりにbackgroundResourceを試すことができます。

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

それとも

flashButtonOn.setImageResource(R.drawable.replacementGraphic); 
+0

は、迅速な答えをありがとうございましたし、溶液。 'ImageButton' xml参照を 'src'ではなく 'background'で設定すると、すべての違いが生じました。 –

15

を試してみてくださいそれは "setImageResource"、 "setBackgroundResource" である必要があります背景ではなく、SRCを変更します。 btn_MyButton.setImageResource(R.drawable.button_bg_selector_collapsed);

6

次の属性使用して画像を設定する:あなたは、動的に画像を変更するには、次を使用する必要があります

android:src="@drawable/on_selector"

を:

ImageButton myButton = (ImageButton) findViewById(R.id.my_button); 
myButton.setImageResource(R.drawable.my_button_image); 
関連する問題