重点:

1、SurfaceView, OpenGL ES 的纹理------照相机捕获图像流纹理

2、style.xml配置文件。设置无标题等信息

    
      
true      
true      
@drawable/bg    

 

3、使用FrameLayout布局,<include/>标签引入子布局。

main.xml

http://schemas.android.com/apk/res/android"    xmlns:tools="
http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@drawable/bg"    >

 

ui_flashlight.xml

    
    

 

 4、使用flash.xml文件实现渐变效果,然后利用android:src="@drawable/flashlight",引入。

flash.xml

    
    

 

 

5、功能代码

Flashlight.java

public class MyFlashLight extends MyBaseActivity { @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);    iView.setTag(false);    //获取屏幕的尺寸  Point point  = new Point();  getWindowManager().getDefaultDisplay().getSize(point);  LayoutParams layoutParams = (LayoutParams) iViewController.getLayoutParams();  //设置热点区的范围  layoutParams.height = point.y * 3/4;  layoutParams.width = point.x /3;  iViewController.setLayoutParams(layoutParams); }  public void onClick_Flashlight(View view){  if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {      Toast.makeText(this, "当前设备没有闪光灯", Toast.LENGTH_SHORT).show();   return;  }  if (((Boolean)iView.getTag()) == false) {   openFlashlight();  } else {   closeFlashlight();  } } private void openFlashlight() {  //TransitionDrawable是一个特殊的Drawable对象,可以实现两个drawable资源之间淡入淡出的效果  TransitionDrawable tDrawable = (TransitionDrawable) iView.getDrawable();  //切换时间200毫秒  tDrawable.startTransition(200);  iView.setTag(true);    try {   //打开相机   mCamera = Camera.open();   int texturId = 0; //预览纹理默认给个值 即可   //照相机获取图像流纹理   mCamera.setPreviewTexture(new SurfaceTexture(texturId));   //启动预览   mCamera.startPreview();   //使用getParameters()获取Camera 的缺省配置参数   mParameters = mCamera.getParameters();   //设置闪光灯模式   mParameters.setFlashMode(mParameters.FLASH_MODE_TORCH);   mCamera.setParameters(mParameters);  } catch (IOException e) {   e.printStackTrace();  }       }   private void closeFlashlight() {  TransitionDrawable tDrawable2 = (TransitionDrawable) iView.getDrawable();  if ((Boolean) iView.getTag()) {   //倒过来时间切换   tDrawable2.reverseTransition(200);   iView.setTag(false);   if (mCamera != null) {    //使用getParameters()获取Camera 的缺省配置参数    mParameters = mCamera.getParameters();    //设置闪光灯模式    mParameters.setFlashMode(Parameters.FLASH_MODE_OFF);    mCamera.setParameters(mParameters);    //停止预览    mCamera.stopPreview();    //释放相机对象    mCamera.release();    //为了使垃圾回收器尽快回收    mCamera = null;       }  }   } //退出程序关闭闪光灯 @Override protected void onPause() {  super.onPause();  closeFlashlight(); }}

 

 

 完整代码见附件(进入我的资料即可下载):MyFlashLight.zip

 实用代码参考: