重点:

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

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

true

true

@drawable/bg

3、使用FrameLayout布局,标签引入子布局。

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<?xml  version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/mui_flashlight"

>

android:id="@+id/img_flashlight"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:src="@drawable/flashlight"

/>

android:id="@+id/img_flashlight_controller"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="bottom|center_horizontal"

android:onClick="onClick_Flashlight"

/>

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

flash.xml<?xml  version="1.0" encoding="utf-8"?>

5、功能代码

Flashlight.javapublic 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

实用代码参考:

java闪光灯_手电筒项目开发一闪光灯相关推荐

  1. 微信小程序_图片连拍_闪光灯_手电筒_录制

    借助小程序组件 < camera > 实现图片连拍.闪关灯.手电筒功能: 注意: 手电筒功能的实现小程序版本最低版本 2.8.0 直接复制运行代码的小伙伴,记得把下面页面代码中 svg 的 ...

  2. java游戏演示ppt_java项目开发实战──五子棋游戏.ppt

    java项目开发实战──五子棋游戏.ppt 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 第 24 ...

  3. 深入理解文档/视图框架体系_九宫格项目开发感悟

    1.项目起源以及采用文档/视图框架体系缘由 我们整天都在说:文档保存项目的数据并处理项目上的数据:视图通过关联获得文档的数据并进行可视化:主窗口框架接收外部事件消息并进行消息分配.这句口头禅感觉接触过 ...

  4. java门禁系统项目开发实现

    文章目录 java门禁系统项目实现 一.项目目标和任务 二.项目结构 package sys Computer.java ControlSys.java Door.java InputEquip.ja ...

  5. 后盾网原创视频_微博项目开发视频教程(php实战),后盾网Thinkphp微博项目实战开发视频教程 微博项目实战教程 后盾网Thinkphp实战教...

    链接失效请联系微信 ZA_summer,有需要某课网某某课堂精品付费课的朋友也可以联系我,欢迎骚扰 01.项目开发前准备.avi 02.建立项目所需数据库模型(上).avi 03.建立项目所需数据库模 ...

  6. 白鹭引擎能用java吗_白鹭引擎开发3D项目(一)

    一.打开Egret Launcher安装Egret 5.3.2引擎. 进入白鹭引擎GitHub(https://github.com/egret-labs/egret-core)下载Egret5.3. ...

  7. java 拼图_拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?

    java 拼图 JDK 9发行日期推迟到2017年7月 距JDK 9发行不到200天,它又被推迟了 . 新的发布日期已更新为2017年7月,比之前推迟的日期晚了四个月. 推迟日期 9月13日,Orac ...

  8. java 拼图_功能项目拼图将Java 9引入

    java 拼图 因此,拼图项目...我们已经对此颇为了解,但尚未看到计划如何兑现其承诺的细节. 这篇文章将精确地做到这一点,并介绍项目的核心概念和功能. 系列 这篇文章是正在进行的有关拼图项目系列的一 ...

  9. 学生成绩管理系统java+mysql+swing入门级项目开发

    夫陶公清风千古,余又何人,敢称庶几 代码已移至Gitee : https://gitee.com/BreezAm/edu-student 文章目录 简要: 登陆运行效果 主界面运行效果图 界面设置运行 ...

最新文章

  1. iterator与const_iterator及const iterator区别
  2. 聊聊我对黑客技术的思考
  3. linux下查看mysql的当前连接情况
  4. 老张 .NetCore与Vue 框架学习
  5. DevOps使用到的工具・术语
  6. java 重定向和转发的区别
  7. Python 创建本地服务器环境生成二维码
  8. 电脑硬盘整数分区计算器
  9. linux 磁盘隔离,Linux 磁盘坏道故障修复
  10. JAVA初学,小白编程,8大基本类型
  11. cocos2dx 圆盘抽奖_cocos2d编写的类似幸运大转盘抽奖源码
  12. 【编程实践】一致性哈希(hash)算法实现
  13. 区块链的最大作用,在于区块链可以将大数据、云计算、人工智能等新技术连接在一起
  14. 关于GPA Involution的思路+解法+代码
  15. 新型复读机——微信语音
  16. 快速入门:LINUX基础 ——教你使用 linux 操作
  17. 用VBA在word创建宏,功能是金额数字转换大写
  18. 2021河南省ICPC省赛总结
  19. jsp未正确拼写字 mysql_(转)MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结...
  20. 什么是Fiddler ?

热门文章

  1. 不平凡的一年 2013
  2. Linux下JavaCv使用GPU加速(Nvidia显卡)
  3. 全球与中国现代风格沙发市场前景动态及投资方向建议研究报告2022-2028年
  4. CSDN博客的积分规则
  5. Oracle11g使用dbms_parallel_execute对大表进行并行update
  6. linux下 redis如何清空缓存
  7. 陶瓷电容,钽电容,铝电解电容对比
  8. Ubuntu上安装搜狗中文输入法
  9. Java反射到底反射什么?
  10. EAUML日拱一卒-微信小程序实战:位置闹铃 (12)-这还不算完