- 浏览: 663236 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
传感器一般用于游戏中,在 Android 系统中为了用户开发方便,提供了大量的传感器支持,要想取得这些传感器的使用,则必须依靠 getSystemService() 方法完成,通过查找指定的服务名称 Context.SENSOR_SERVICE 取得传感器服务之后,实际上返回的只是一个 android.hardware.SensorManager 类的对象,该类的常量及常用方法如下:
No. |
常量与方法 |
描述 |
1 |
Public static final int SENSOR_DELAY_GAME |
适合游戏的传感器 |
2 |
Public Boolean registerListener(SensorEventListener listener,Sensor Sensor,int rate) |
注册传感器监听器 |
3 |
Public Sensor getDefaultSensor(int type) |
取得指定类型传感器对象 |
在上面中的 getDefaultSensor 方法需要一个传感器类型的数值,该数值是由 android.harware.Sensor 类中定义的常量来决定的,在 Android 中支持的传感器类型如下:
No. |
传感器类型 |
描述 |
1 |
android.hardware.Sensor.TYPE_ORIENTATION |
方位传感器 |
2 |
android.hardware.Sensor.TYPE_MAGNETIC_FIELD |
磁场传感器 |
3 |
android.hardware.Sensor.TYPE_ACCELEROMETER |
加速传感器 |
4 |
android.hardware.Sensor.TYPE_GRAVITY |
重力传感器 |
5 |
android.hardware.Sensor.TYPE_GYROSCOPE |
螺旋仪传感器 |
6 |
android.hardware.Sensor.TYPE_LIGHT |
亮度传感器 |
7 |
android.hardware.Sensor.TYPE_LINEAR_ACCELERATION |
直线加速传感器 |
8 |
android.hardware.Sensor.TYPE_PRESSURE |
压力感应传感器 |
9 |
android.hardware.Sensor.TYPE_PROXIMITY |
接近传感器 |
10 |
android.hardware.Sensor.TYPE_TEMPERATURE |
温度传感器 |
11 |
android.hardware.Sensor.TYPE_ROTATION_VECTOR |
矢量旋转传感器 |
12 |
android.hardware.Sensor.TYPE_ALL |
使用全功能传感器 |
实际上对于传感器的操作主要就在操作的监听上,而如果要监听,则必须依靠 android.hardware.SensorEventListener 接口完成,定义如下:
public interface SensorEventListener{ /** * @descrption 传感器精度改变时调用 * @param sensor 传感器对象 * @param accuracy 新的传感器精度 */ public abstract void onAccuracyChanged(Sensor sensor,int accuracy); /** * @descrption 传感器数值改变时调用 * @param event传感器操作事件 */ public abstract void onSensorChanged(SensorEvent event); }
一、 方位传感器—移动小球
BallView.java
package com.iflytek.demo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.AttributeSet; import android.view.View; public class BallView extends View implements SensorEventListener { private Bitmap ball = null; private float[] allValue; private Point point = new Point();// 保存点 private int xSpeed = 0;// x轴 private int ySpeed = 0;// y轴 public BallView(Context context, AttributeSet attrs) { super(context, attrs); super.setBackgroundColor(Color.WHITE); // 设置底色为白色 this.ball = BitmapFactory.decodeResource(super.getResources(), R.drawable.ball);// 取得图片 SensorManager manager = (SensorManager) context .getSystemService(Context.SENSOR_SERVICE); // 现在只是找到了一个传感器,但是没有定义类型 manager.registerListener(this, manager.getDefaultSensor(Sensor.TYPE_ORIENTATION),// 方位传感器 SensorManager.SENSOR_DELAY_GAME); // 创建了一个适合于游戏操作的方位传感器 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { // 传感器方位改变 if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { // 判断传感器方式为方位传感器 float value[] = event.values; // 取得3个轴的值 BallView.this.allValue = value; // 保存值并重绘 // postInvalidate()方法主要用于非UI线程的刷新操作 // invalidate()主要用于UI线程的刷新 super.postInvalidate(); // 刷新界面调用onDraw() } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); // 根据传感器的数值来改变球的速度 if (this.allValue != null) { // 已经取得了数据 this.xSpeed = (int) -this.allValue[2]; // 计算X轴速度 this.ySpeed = (int) -this.allValue[1];// 设置Y轴速度 } this.point.x += this.xSpeed;// X坐标点 this.point.y += this.ySpeed;// Y坐标点 if (this.point.x < 0) {// 设置X轴坐标 this.point.x = 0; } if (this.point.y < 0) { this.point.y = 0; } if (point.x > super.getWidth() - this.ball.getWidth()) { // X轴已经显示过了 this.point.x = super.getWidth() - this.ball.getWidth(); } if (point.y > super.getHeight() - this.ball.getHeight()) { this.point.y = super.getHeight() - this.ball.getWidth(); // 设置Y 轴的边界 } canvas.drawBitmap(this.ball, this.point.x, this.point.y, p);// 重新绘制图形 } }
main.xml
<?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" > <!-- 自定义View组件 --> <com.iflytek.demo.BallView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
二、磁场传感器—指北针
ArrowView.java
package com.iflytek.demo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.AttributeSet; import android.view.View; public class ArrowView extends View implements SensorEventListener { private Bitmap comp = null; private float[] allValue; public ArrowView(Context context, AttributeSet attrs) { super(context, attrs); super.setBackgroundColor(Color.WHITE); // 底色为白色 this.comp = BitmapFactory.decodeResource(super.getResources(), R.drawable.arrow); SensorManager manager = (SensorManager) context .getSystemService(Context.SENSOR_SERVICE); // 现在只是找到了一个传感器,但是没有定义类型 manager.registerListener(this, manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME); // 创建了一个适合于游戏操作的磁场传感器 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { // 传感器方位改变 if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { // 现在是方位传感器 float value[] = event.values; // 取得所有的偏离数据 ArrowView.this.allValue = value; // 取得三个轴的值 super.postInvalidate(); // 主线程的现实需要重绘 } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); // 根据传感器的数值来改变球的速度 if (this.allValue != null) { // 已经取得了数据 float x = this.allValue[0]; float y = this.allValue[1]; canvas.restore(); // 重置绘图对象 // 设置以屏幕中心点作为旋转中心 canvas.translate(super.getWidth() / 2, super.getHeight() / 2); // 判断y轴是否为0的旋转角度 if (y == 0 && x > 0) { canvas.rotate(90); // 旋转角度为90度 } else if (y == 0 && x < 0) { canvas.rotate(270); // 旋转角度为270度 } else { // 根据x和y的值计算旋转角度,而这个角度就是依靠tan()值来计算 if (y >= 0) { canvas.rotate((float) Math.tanh(x / y) * 90); } else { canvas.rotate(180 + (float) Math.tanh(x / y) * 90); } } } canvas.drawBitmap(this.comp, -this.comp.getWidth() / 2, -this.comp.getHeight() / 2, p); } }
main.xml
<?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" > <!-- 自定义View组件 --> <com.iflytek.demo.ArrowView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1541Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2453WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1859这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3267对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2158与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1846在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2834一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1380在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 1956一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1569一、绘制简单图 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3431一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2002一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1480一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2206Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1680Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1514在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2265导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1249Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 1930在一个项目之中,会由多个 Activity ... -
Android判断是否有网络连接
2013-04-25 16:34 1402Android中判断有时候因为功能的需求,需要判断是否有网络 ...
相关推荐
Android传感器开发实例,学习用。两个Activity,一个用来查看手机里的传感器的个数和种类,另一个是小游戏,用加速度传感器控制小球的位置。
扉页 -12 版权 -11 作者简介 -10 前言 -9 目录 -4 第1章 Android简介 1 1.1 一些背景信息 2 1.1.1 不远的过去 2 1.1.2 未来的前景 2 1.2 对Android的误解 3 1.3 开放的移动开发平台 3 1.4 自带的Android应用...
Android应用源码开发Demo,主要用于毕业设计学习。
Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序—— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。 Android以Java为编程语言,使...
该demo实现了 三个传感器数据获取,显示在同一个activity中,并且每隔一秒刷新数据。方便对比,学习。
3> 学习使用ANDROID操作系统 4> 开发与运行(卸载)第一个ANDROID应用 5> 项目的目录结构 6> 项目清单文件分析 7> 分析第一个ANDROID应用的启动过程 8> 电话拔打 9> 查看手机模拟器往控制台输出的日志信息 10> 如何...
手机摇一摇DEMO代码,实现摇一摇执行特定程序.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android平台下传感器与应用的开发。在物联网横空出世的时代,就算是码农也需要更多地了解传感器。
功能比较杂,有计算器、定位(只显示经纬度) 传感器(摇一摇得出结果) 显示手机的运营商 本来想做一些有用的功能,结果没时间做,所以就做了这些简单学习用的,(eclipse + android SDK 开发) 高手请绕道
Android获取手机的基本信息.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
《Android 4高级编程(第3版)》由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4 SDK开发移动应用程序的理想指南。本书见解深刻,帮助经验丰富的Android开发人员充分挖掘Android 4的新特性的潜力,...
开发一个 Andorid APP,使其可以用手机传感器读取手机的实时加速度、角速度和方向角,并将数据保存,测试完成后可以导出。APP 全部代码已经提交至 Github 目录实验环境传感器开发在 onCreate 方法中,获取传感器...
《Android 4高级编程(第3版)》由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4SDK开发移动应用程序的理想指南。本书见解深刻,帮助经验丰富的Android开发人员充分挖掘Android4的新特性的潜力...
本文实例讲述了Android开发中的重力传感器用法。分享给大家供大家参考,具体如下: 重力传感器与方向传感器的开发步骤类似,只要理清了期中的x,y,z的值之后就可以根据他们的变化来进行编程了,首先来看一副图 假设...
Android 动画电子温度计 温度传感器 动态得展示了从手机温度传感器得到的温度值,现在提供给初学者学习研究,希望大家喜欢。
Android 4高级编程(第3版)》由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4 SDK开发移动应用程序的理想指南。《Android 4高级编程(第3版)》见解深刻,帮助经验丰富的Android开发人员充分挖掘...
在不获取手机麦克风权限的情况下,通过陀螺仪传感器数据的神经网络算法,就可以从声波振动中提取出讲话者的语音。 现代智能手机上的MEMS陀螺仪足够灵敏,可以测量手机附近的声音信号。结果信号仅包含非常低的频率...
例如QQ运动、微信运动,支付宝运动等常用运动计步软件都是直接调用Android中的Sensor传感器服务,从而获取到每日的步数。但是并非所有 4.4 版本之后的手机都有这个传感器。该传感器 采用计步传感器时,每次需要增量...
1 1 4 如何解决Android学习中遇到的难题 1 1 5 Android只能在手机或其他移动设备上使用吗 1 2 Android的基本概念 1 2 1 Android的特点都有哪些 1 2 2 MVC模式 1 2 3 Android 的系统构架 1 3 开发Android应用程序 1 3...
Android应用源码之平台智能手机的温度传感器应用.zip项目安卓应用源码下载Android应用源码之平台智能手机的温度传感器应用.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司...