作为新手,我认为做小东西是学习一门语言最快的方法,目前在跟着教程制作超级手电筒,每天记录一些,直到做完这个手电筒

主要思路

关于手电筒,两个imageview带有相应的开关图片,一个空白的imageview作为热区,代码控制其大小,用来让用户点击

框架布局—上下依次继承关系
BaseActivety 主文件,初始化一些按键
FlashLight 控制手电筒的java类
mainActivity 暂时未用到

下面学习到的一些操作记录

获取屏幕大小,并动态设置imageview的大小

        /** 下面手动获取屏幕尺寸,调节热区大小*/Point point = new Point();getWindowManager().getDefaultDisplay().getSize(point);LayoutParams Params = flashlightcontroller.getLayoutParams();Params.height = point.y*3/4;Params.width = point.x/3;flashlightcontroller.setLayoutParams(Params);}

在一个activity_main.xml文件引用其他的xml文件

 <include layout="@layout/ui_flashlight"/>

空白热区的建立

<!-- 空白的热区建立,在最底层,中间,并且添加点击事件 --><ImageView
        android:id="@+id/imageView_flashlight_controller"android:layout_width="100dp"android:layout_height="320dp"android:layout_gravity="bottom|center_horizontal" android:onClick="onclick_flashlight"/>

styles.xml文件样式的设置

<!-- 不同的values文件夹对应安卓不同版本的styles. -->
<!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><item name ="android:windowNoTitle">true</item><item name="android:windowFullscreen">true</item><item name="android:windowBackground">@drawable/bg</item>     </style>

设置软件使用照相机闪光灯快捷方式权限

<!-- 这里设置使用照相机和闪光灯的权限 --><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.FLASHLIGHT"/><!-- 这里设置使用快捷方式创建的权限 --><uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/><uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>

闪光灯开启

/** 控制闪光灯的开*/protected void startflashlight() {//使用transitiondrawable来控制动画,也就是flashlight.xml这个文件TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable(); //控制转变时间200毫秒drawable.startTransition(200);//设置标识,如果被打开,则tag为trueflashlight.setTag(true);/** 下面开始打开照相机,然后处理图像到后台,然后设置闪光灯打开*/try {/** camera和其组件之间的交流,通过参数parmeters来进行关联,camera可以获取当前的状态参数* 再通过setparameters来进行设置新的参数*/mcamera = Camera.open();//打开照相机int texttrueid = 0;//?暂时不知道是啥mcamera.setPreviewTexture(new SurfaceTexture(texttrueid));mcamera.startPreview();mparaters = mcamera.getParameters();//设置打开闪光的,并点亮mparaters.setFlashMode(Parameters.FLASH_MODE_TORCH);mcamera.setParameters(mparaters);} catch (Exception e) {}}

闪光灯关闭

/** 控制闪光的的关闭*/protected void stopflashlight() {TransitionDrawable drawable = (TransitionDrawable) flashlight.getDrawable();if((Boolean) flashlight.getTag()){drawable.reverseTransition(200);flashlight.setTag(false);if(mcamera != null){mparaters = mcamera.getParameters();mparaters.setFlashMode(Parameters.FLASH_MODE_OFF);mcamera.setParameters(mparaters);mcamera.stopPreview();//停止预览mcamera.release();//释放掉资源,不然下次打不开mcamera = null;//设置为null为了垃圾回收机制尽快回收}}}/** 当程序失去焦点的时候自动暂停闪光的*/@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();stopflashlight();}

利用xml文件设置imageview切换动画

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/off" /><item android:drawable="@drawable/on" />
</transition>

关于xml中onclick的注意事项

这样定义

<ImageView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:layout_weight="1"android:onClick="onclick_toflashlight"android:src="@drawable/main_flashlight" />

这样使用

/** 点击手电筒图片实现的方法* view不能省略,第二类要是public类型*/public void onclick_toflashlight(View view) {Uihideall();ui_flashlight.setVisibility(View.VISIBLE);currentUItype = UIType.UI_TYPE_FLASHLIGHT;previousUItype = UIType.UI_TYPE_FLASHLIGHT;}

枚举类型可用来表示当前状态,当有多个功能的时候

    protected enum UIType {UI_TYPE_MAIN, UI_TYPE_FLASHLIGHT, UI_TYPE_WARNINGLIGHT, UI_TYPE_MORSE, UI_TYPE_BLUB, UI_TYPE_COLOR, UI_TYPE_POLICE, UI_TYPE_SETTINGS}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/-niuli/p/4856447.html

android--超级手电筒的开发记录相关推荐

  1. java手电筒_android--超级手电筒的开发记录

    作为新手,我认为做小东西是学习一门语言最快的方法,目前在跟着教程制作超级手电筒,每天记录一些,直到做完这个手电筒 主要思路 关于手电筒,两个imageview带有相应的开关图片,一个空白的imagev ...

  2. android ril wifi,Android WIFI Ralink RT3070开发记录

    一.wifi基本架构 1.开源代码移植部分(external目录下) wireless_tools.wpa_supplicant.wpa_supplicant_6(后两项已经移植过) 生成库libwp ...

  3. Android学Jni/Ndk 开发记录(一)

    治疗拖延症的唯一办法就是:一想起些什么 / 要做些什么就 TM 立马去做! 是的,突然想起我不会 JNI.NDK 开发.解决办法:立马去学! 一:配置 NDK 环境 下载 NDK 写入到配置文件 二: ...

  4. Android爱读app开发记录之一---Splash界面

    一.简单介绍        该APP是一款简单易用.界面美观且功能强大的语音阅读器,实现本地导入阅读(支持大文件).在线阅读.书签.跳转.日夜间模式.设置字体大小.设置书架/阅读界面背景等功能     ...

  5. android平台手电筒开发源代码

    android平台手电筒开发源代码,AndroidManifest.xml文件的入口是startapp,这个文件没上传上来,大家可以自己写. 1. [代码]android     jQuery特效 / ...

  6. Android开发记录(转)

    一.Android模拟器相关 1. Android模拟器安装 Market 模拟器默认没有安装 Market,看到网上有较为复杂的安装方法,也有1个简单的,试了简单的,在 Android2.2 模拟器 ...

  7. MTK6735 android开发记录 编译配置(一)

    MTK6735 android开发记录 编译配置(一) 指导文件:环境建立,编译,配置GPIO等: :YYW_M_6735相关文档\YYW-M-6735-Support.pdf 里面有什么不懂的,比如 ...

  8. 原创:Android应用开发记录-Andorid歌词秀(4)完成,含源码

    最新版软件请参照: Android应用开发记录-字幕播放器(5)完善 功能简介: 1.自动读取与音乐相同位置的歌词文件 2.根据播放进度,表示当前的歌词 3.按歌词语句快进,快退. 可以用来记歌词,学 ...

  9. 原创:Android应用开发记录-Andorid歌词秀(3)使用的Service的音频播放器

    在下文中我们实现的简单的音乐播放功能. 原创:Android应用开发记录-Andorid歌词秀(2)先来一个音频播放器 但是这样的方式在程序退出后播放也会停止,为了解决这个问题,使用的Service类 ...

最新文章

  1. Linux服务管理---系统运行级别、rpm启动与自启动、源码包的启动...
  2. python基本语法总结-Python基本语法总结(三) 常用内置函数
  3. cacti + nagios + npc 整合部署
  4. EndDialog和CDialog::OnOK()
  5. 三星官方回应“7nm EUV良率”:内容与事实完全不符
  6. 鸿蒙移植stm32,韦东山老师要移植鸿蒙的那个STM32MP157具体是什么?
  7. 2012 ServerStandardEval 激活
  8. Ubuntu系统设置截图快捷键
  9. 计算机人工智能论文参考文献格式,人工智能论文参考文献范例借鉴
  10. ZenTao不支持Win8.1问题解决
  11. python可视化分析网易云音乐评论_网易云音乐评论催泪刷屏?我用Python抓取了1008328条热评告诉你为什么!...
  12. git常用命令之git push使用说明
  13. SAP 批导长文本字段自动和手动换行
  14. 3.2 项目(多肉)
  15. IP(Internet Protocol)网际协议
  16. CoreAudioApi-音频终端设备事件-检测耳机插拔
  17. unity 快捷键之summary
  18. Nginx proxy_set_header 理解
  19. fit me app Android,一款健身与购物一体的app
  20. 创业必称“大数据”?是时候重新审视大数据的价值了

热门文章

  1. flink的table/sql api的多种写法汇总
  2. ubuntu20.04安装搜狗输入法(社区版+个人版)
  3. 用c语言编译二叉树,C语言实现二叉树的基本操作
  4. mysql查询case when_【原创】关于MySQL高级查询–case when
  5. python flask跨域_Flask框架踩坑之ajax跨域请求实现
  6. java反射模式_Java反射机制详解
  7. IMYAOPTableView 源码学习笔记
  8. Ubuntu上使用octopress+github建立个人博客
  9. linux各种复制命令
  10. 【转】使用Navicat for Oracle新建表空间、用户及权限赋予