2013-01-21 108 views
2

我有一個使用兩個按鈕(on_btn和off_btn)打開和關閉手電筒的手電筒代碼。將兩個按鈕更改爲切換按鈕

如何將它們關聯在一個按鈕中?

非常新手請您給出詳細的建議嗎?

下面的代碼可以從答案中找到:它適用於我的手機。但在模擬器上,它會在點擊按鈕時崩潰。這裏是貓日誌https://dl.dropbox.com/u/15065300/logcat1.png

行號74是:參數params = mCamera.getParameters();

請問任何人有什麼建議嗎?

public class FlashLight extends Activity { 


    private final static String LOG_TAG = "FlashLight"; 
    private Button mOnBtn; 
    private Camera mCamera;  
    private boolean isActive; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     //this will be inside your onCreate... 
     mOnBtn = (Button) findViewById(R.id.on_btn); 
     mOnBtn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       flipSwitch(); 
       processClick(); 

      } 
     }); 
    } 

    //these will be outside your onCreate 
    public void flipSwitch() { 
     isActive = !isActive; 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     try{ 
      mCamera = Camera.open(); 
      mCamera.startPreview(); 
      Toast.makeText(getApplicationContext(),"Camera is present", Toast.LENGTH_LONG).show(); 

     } catch(Exception e){ 
      Log.e(LOG_TAG, "Impossible d'ouvrir la camera"); 
     } 
    } 

    @Override 
    protected void onPause() { 
     if(mCamera != null){ 
      mCamera.release(); 
      mCamera = null; 
     } 
     super.onPause(); 
    } 

    public void processClick() { 
     if(isActive) { 
      Parameters params = mCamera.getParameters(); 
      params.set("flash-mode", "torch"); 
      mCamera.setParameters(params); 
      mCamera.startPreview(); 
     } 

     else { 

      Parameters params = mCamera.getParameters(); 
      params.set("flash-mode", "off"); 
      mCamera.setParameters(params); 
      mCamera.stopPreview(); 

     } 
    } 
} 
+0

做了下面的答案有幫助嗎?如果是這樣,接受一個或不然,擴大任何進一步的問題。 – Jeeter

+0

@Jeeter你的建議適用於我,但它在模擬器上崩潰,同時點擊按鈕。我上面編輯了我的代碼。你有什麼進一步的建議嗎? –

+0

我能想到的唯一的事情是,當你調用它時,你的'mCamera'對象是null。 – Jeeter

回答

2

使用按鈕來翻轉布爾值,並更改您的手電筒以相應地開啓和關閉。

private boolean isActive; 

//this will be inside your onCreate... 
button.setOnClickListener(new View.onClickListener() { 
    public void onClick(View v) { 
     flipSwitch(); 
     processClick(); 
    } 
} 

//these will be outside your onCreate 
public void flipSwitch() { 
    isActive = !isActive; 
} 

public void processClick() { 
    if(isActive) { 
     //button is clicked on 
    } 
    else { 
     //button is clicked off 
    } 
} 
+0

請你再詳細說明一下嗎? –

+0

@AsimKrishnaDas我已經更新了我的答案 – Jeeter

2

您可以隨時使用Toggle Button而不是兩個按鈕。這非常「安卓正式」。

//Create a toggle button 
ToggleButton tg = (ToggleButton) findviewbyId(R.id.togbut); 

//Implement onClickListener 
tg.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v){ 
     //Flip on or off 
    } 
}); 

onClick()方法,你可以做你需要根據你的應用程序是假設做當按鈕開啓或關閉時該怎麼辦。

在xml佈局中,您可以說開關按鈕在開啓和關閉時所說的內容。

<ToggleButton 
    android:id="@+id/togbut" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOn="Button On" 
    android:textOff="Button Off" 
    android:checked="true" /> 

當您單擊切換按鈕時,它會自動更改文本並切換。

這裏有一個很好的例子:http://www.mkyong.com/android/android-togglebutton-example/

希望幫助!

+0

我想正確使用切換按鈕,但是如何將上面的代碼合併到一個按鈕ID中? –

+0

@AsimKrishnaDas更新了我的答案 –

+0

@AsimKrishnaDas增加了一點點。希望它有幫助 –