注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

Android 插曲1--做一个安卓手电筒  

2013-09-04 22:07:54|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

连续学了好几天了,今天找个案例做做,没学几天不会没关系,只有在做真正的程序才能快速的提高自己。

今天做一个安卓的手电筒,现在网上的安卓手电筒不外乎也就两种,第一种,用屏幕照明,第二种,用闪光灯照明。我都做了个,但是我的手机是V880,没有闪光灯,没办法测试,发在最后,哪位大哥下载下来安装了试试,给留个话,不胜感激。

先说用屏幕照明的,思路是把屏幕设置成全屏的,然后亮度跳成最高,设置保持常亮。然后可以加上一个颜色选择对话框,能让用户选择灯光颜色就行了,实现起来不太麻烦。先说布局文件,特别简单,就是一个LinearLayout。代码如下

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
android:orientation
="vertical"
android:id
="@+id/main" >

</LinearLayout>
复制代码

这个和以前用的布局有的差别,我给LinearLayout加了一个id,这个id在代码里面要用到。
然后下面是后台的代码,注释的已经很清楚了

复制代码
 1 package com.yyj.Lighter;
2
3 import com.yyj.Lighter.ColorPickerDialog.OnColorChangedListener;
4 import android.app.Activity;
5 import android.os.Bundle;
6 import android.view.MotionEvent;
7 import android.view.Window;
8 import android.view.WindowManager;
9 import android.view.WindowManager.LayoutParams;
10 import android.widget.LinearLayout;
11 import android.widget.Toast;
12 import com.yyj.Lighter.R;
13
14 public class RadioButtontestActivity extends Activity {
15 /** Called when the activity is first created. */
16 LinearLayout main;
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20
21 //设置无标题
22 requestWindowFeature(Window.FEATURE_NO_TITLE);
23 //设置全屏
24 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
25
26 setContentView(R.layout.main);
27 //得到LinearLayout,这一句用到了main.xml中定义的LinearLayout的id
28 main=(LinearLayout)findViewById(R.id.main);
29 //设置LinearLayout背景色为白色
30 main.setBackgroundColor(0xffffffff);
31 //设置背景亮度为最高
32 LayoutParams lParams=getWindow().getAttributes();
33 lParams.screenBrightness=1.0f;
34 getWindow().setAttributes(lParams);
35 //设置背景常亮
36 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
37 }
38
39 @Override
40 //屏幕的触摸事件
41 public boolean onTouchEvent(MotionEvent event) {
42 // 只有在按下的时候才响应事件,不加这一句,在手指离开屏幕的时候还会响应一次事件,总共两次
43 if (event.getAction()==MotionEvent.ACTION_DOWN) {
44 //定义一个颜色选择对话框
45 ColorPickerDialog cDialog=new ColorPickerDialog(RadioButtontestActivity.this, new OnColorChangedListener() {
46
47 @Override
48 public void colorChanged(int color) {
49 // 当颜色改变的时候,改变屏幕背景色,即为灯光颜色
50 main.setBackgroundColor(color);
51 }
52 }, 0xFFFFFFFF);
53 cDialog.show();
54 }
55 return super.onTouchEvent(event);
56 }
57
58 }
复制代码

上面的代码里面用到了一个ColorPickerDialog,这个可以在android的sdk目录下找到比如我的是在“D:\android- sdk-windows\samples\android-7\ApiDemos\src\com\example\android\apis \graphics\ColorPickerDialog.java”,原版本是不带黑色和白色的,我修改了一下,现在可以了。代码如下,修改部分做了说 明,

View Code

用屏幕照明到这里就结束了,最后面提供源代码的下载。

用闪光灯照明,我在网上着了代码,因为我的手机没有闪光灯,所以贴上来,不确定是不是能用,修改以后的后台代码如下,被我改成了智能选择的,有闪光灯就用闪光灯,没有再用屏幕

复制代码
 1 package com.yyj.Lighter;
2
3 import com.yyj.Lighter.ColorPickerDialog.OnColorChangedListener;
4 import android.app.Activity;
5 import android.content.Context;
6 import android.content.pm.FeatureInfo;
7 import android.content.pm.PackageManager;
8 import android.hardware.Camera;
9 import android.os.Bundle;
10 import android.view.MotionEvent;
11 import android.view.Window;
12 import android.view.WindowManager;
13 import android.view.WindowManager.LayoutParams;
14 import android.widget.LinearLayout;
15 import android.widget.Toast;
16
17 import com.yyj.Lighter.R;
18
19 public class LighterActivity extends Activity {
20 /** Called when the activity is first created. */
21 LinearLayout main;
22 boolean hasFlashLight=false;
23 Camera camera;
24 @Override
25 public void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27
28 //设置无标题
29 requestWindowFeature(Window.FEATURE_NO_TITLE);
30 //设置全屏
31 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
32 setContentView(R.layout.main);
33 //以下代码判断手机是否带闪光灯
34 FeatureInfo[] feature=LighterActivity.this.getPackageManager().getSystemAvailableFeatures();
35 for (FeatureInfo featureInfo : feature) {
36 if (PackageManager.FEATURE_CAMERA_FLASH.equals(featureInfo.name)) {
37 hasFlashLight=true;
38 break;
39 }
40 }
41 //带闪光灯
42 if(hasFlashLight) {
43 camera=Camera.open();
44 Camera.Parameters parameters=camera.getParameters();
45 parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
46 parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
47 camera.setParameters(parameters);
48 } else {
49 Toast.makeText(LighterActivity.this, "不支持闪光灯,改用屏幕照明。", Toast.LENGTH_LONG).show();
50 main=(LinearLayout)findViewById(R.id.main);
51 //设置背景色为白色
52 main.setBackgroundColor(0xFFFFFFFF);
53 //设置背景亮度为最高
54 LayoutParams lParams=getWindow().getAttributes();
55 lParams.screenBrightness=1.0f;
56 getWindow().setAttributes(lParams);
57 //设置背景常亮
58 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
59 }
60 }
61
62 @Override
63 public boolean onTouchEvent(MotionEvent event) {
64 if (event.getAction()==MotionEvent.ACTION_DOWN) {
65 if (!hasFlashLight) {
66 ColorPickerDialog cDialog=new ColorPickerDialog(LighterActivity.this, new OnColorChangedListener() {
67
68 public void colorChanged(int color) {
69 main.setBackgroundColor(color);
70 }
71 }, 0xFFFFFFFF);
72 cDialog.setCanceledOnTouchOutside(true);
73 cDialog.show();
74 }
75 }
76 return super.onTouchEvent(event);
77 }
78
79
80 @Override
81 protected void onDestroy() {
82 //最后释放Camara对象
83 if (hasFlashLight) {
84 Camera.Parameters parameters=camera.getParameters();
85 parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
86 camera.setParameters(parameters);
87 camera.release();
88 }
89 super.onDestroy();
90 }
91 }
复制代码

用闪光灯需要在AndroidManifest.xml文件里面定义权限

复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package
="com.yyj.Lighter"
android:versionCode
="1"
android:versionName
="1.0" >

<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<application
android:icon="@drawable/ic_launcher"
android:label
="@string/app_name" >
<activity
android:name=".LighterActivity"
android:label
="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
复制代码

好了最后附上安装文件和源码。两个版本:

1.屏幕照明,安装文件 Light.apk,源文件下载Lighter1.zip,这个确定能用。

2.闪光灯照明,安装文件 Light2.apk,源文件下载Lighter2.zip,这个不确定是否正常运行,反正我的没有闪光灯,效果和第一个一样。有闪光灯的哥们帮忙测试下,谢谢了

最后说一句,上面两个安装包可能会冲突,安装不成功,先删除另一个。

最后来几张截图

  评论这张
 
阅读(452)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017