2013-01-21 72 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增加了一点点。希望它有帮助 –