文章目录
一、引言二、设计1、指南针(方向传感器)(1)效果(2)UI设计(3)功能设计 2、摇一摇(加速度传感器)(1)效果(2)UI设计(3)功能设计 三、附件一、引言
描述:传感器是机器产品的重要组成,一件拥有传感器的产品,才能更加具备“情感”。就比如地图导航类产品,就需要用到多种传感器(方向传感器、磁场传感器、加速度传感器等)。传感器的存在,能够更好的表达出用户无法用语言详细描述的需求。难度:中级知识点:1、方向传感器
2、加速度传感器
3、Animation动画例子:指南针、摇一摇
二、设计
虚拟机没有传感器,所以传感器功能需要使用真机来进行模拟。
1、指南针(方向传感器)
(1)效果
(2)UI设计
建议:关于ImageView中src图片路径,最好是选择一张有方向感的图片(比如:箭头、等腰三角形)。
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"tools:context=".MainActivity"><ImageViewandroid:id="@+id/image_znz"android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="fitCenter"android:src="@drawable/znz"/></RelativeLayout>
(3)功能设计
注册传感器监听器
SensorManager mSensorManager; //管理器@Overrideprotected void onResume(){super.onResume();mSensorManager.registerListener(mylistenner, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);}
传感器事件侦听器
ImageView image; //指南针图片float currentDegree = 0f; //指南针图片转过的角度Mylistenner mylistenner =new Mylistenner();public class Mylistenner implements SensorEventListener{@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {//传感器值改变// TODO Auto-generated method stub}@Overridepublic void onSensorChanged(SensorEvent event) {//精度改变// TODO Auto-generated method stub//获取触发event的传感器类型int sensorType = event.sensor.getType();switch(sensorType){case Sensor.TYPE_ORIENTATION:float degree = event.values[0]; //获取z转过的角度//穿件旋转动画RotateAnimation ra = new RotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);ra.setDuration(100);//动画持续时间image.startAnimation(ra);currentDegree = -degree;break;}}}
初始化代码
image = (ImageView)findViewById(R.id.image_znz);mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); //获取管理服务
2、摇一摇(加速度传感器)
(1)效果
(2)UI设计
建议:最好是将一张完整的图片,一分为二。
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#404445"android:gravity="center"tools:context=".MainActivity"><ImageViewandroid:id="@+id/image_sha"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/sha"/><ImageViewandroid:id="@+id/image_xia"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/xia"android:layout_below="@+id/image_sha"/></RelativeLayout>
动画一 translate_anim.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"><translateandroid:fromXDelta="0.0"android:fromYDelta="0.0"android:toXDelta="0.0"android:toYDelta="100"android:repeatCount="infinite"android:repeatMode="reverse"android:duration="1000"/></set>
动画二 translatex_anim.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"><translateandroid:fromXDelta="0.0"android:fromYDelta="0.0"android:toXDelta="0.0"android:toYDelta="-100"android:repeatCount="infinite"android:repeatMode="reverse"android:duration="1000" /></set>
(3)功能设计
AndroidManifest.xml 注册权限
<uses-permission android:name="android.permission.VIBRATE" />
加速度传感器注册监听器
private SensorManager sensorManager; //定义传感器管理器@Overrideprotected void onResume() {super.onResume();sensorManager.registerListener(this,sensor , SensorManager.SENSOR_DELAY_GAME);}
传感器事件侦听器
@Overridepublic void onSensorChanged(SensorEvent event) {float[] values = event.values; //获取传感器X、Y、Z三个轴的输出信息int sensorType = event.sensor.getType(); // 获取传感器类型if (sensorType == Sensor.TYPE_ACCELEROMETER) {//如果是加速度传感器//X轴输出信息>15,Y轴输出信息>15,Z轴输出信息>20if (values[0] > 15 || values[1] > 15 || values[2] > 20) {//动画向上Animation translate_sha = AnimationUtils.loadAnimation(this,R.anim.translatex_anim);sha.startAnimation(translate_sha);//动画向下Animation translate_xia = AnimationUtils.loadAnimation(this,R.anim.translate_anim);xia.startAnimation(translate_xia);Toast.makeText(MainActivity.this, "不好意思,摇晚了!!", Toast.LENGTH_SHORT).show();vibrator.vibrate(500);//设置振动器频率sensorManager.unregisterListener(this); //取消注册监听器}}}
三、附件
(CSDN下载地址)
方向传感器:/download/weixin_48916759/87916890
加速度传感器:/download/weixin_48916759/87916891
(Gitee下载地址)
方向传感器:/xu-pq/android-demo/tree/master/zhinanzhen
加速度传感器:/xu-pq/android-demo/tree/master/yaoyiyao