传感器

来源:互联网 发布:apowersoft mac 破解 编辑:程序博客网 时间:2024/04/27 18:41

效果图:


不求甚解,先贴代码,以后有时间再补解

xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="${relativePackage}.${activityClass}" >    <TextView        android:id="@+id/text"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <ImageView        android:id="@+id/compass_immg"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_centerInParent="true"        android:layout_centerVertical="true"        android:background="@drawable/bg" />    <ImageView        android:layout_width="30dip"        android:layout_height="30dip"        android:layout_centerHorizontal="true"        android:layout_centerInParent="true"        android:layout_centerVertical="true"        android:background="@drawable/point" /></RelativeLayout>
MainActivity.java

package com.example.lightsensortest;import android.app.Activity;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private TextView text;private SensorManager sensorManager;//背景private ImageView compassImg;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);text = (TextView) findViewById(R.id.text);compassImg=(ImageView) findViewById(R.id.compass_immg);sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);//光照传感器Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_NORMAL);//加速度传感器Sensor sensor1 = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);sensorManager.registerListener(listener1, sensor1,SensorManager.SENSOR_DELAY_NORMAL);//简易指南针,需要两个传感器,分别是加速度传感器、地磁传感器Sensor sensor21 = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);sensorManager.registerListener(listener2, sensor21,SensorManager.SENSOR_DELAY_GAME);Sensor sensor22 = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);sensorManager.registerListener(listener2, sensor22,SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onDestroy() {super.onDestroy();if (sensorManager != null) {sensorManager.unregisterListener(listener);}}//光照传感器private SensorEventListener listener = new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {float value = event.values[0];text.setText("Current light is" + value + "lx");}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}};//加速度传感器private SensorEventListener listener1 = new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {float xValue=Math.abs(event.values[0]);float yValue=Math.abs(event.values[1]);float zValue=Math.abs(event.values[2]);if (xValue>15||yValue>15||zValue>15) {Toast.makeText(MainActivity.this,"摇一摇",Toast.LENGTH_LONG).show();}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}};//加速度传感器和地磁传感器private SensorEventListener listener2 = new SensorEventListener() {float[] accelerometerValues=new float[3];float[] magneticValues=new float[3];private float lastRotateDegree;@Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {accelerometerValues=event.values.clone();}else if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){magneticValues=event.values.clone();}float[] R=new float[9];float[] values=new float[3];SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);SensorManager.getOrientation(R, values);//Log.d("MainActivity","value[0] is"+Math.toDegrees(values[0]));float rotateDegree=-(float)Math.toDegrees(values[0]);if (Math.abs(rotateDegree-lastRotateDegree)>1) {RotateAnimation animation=new RotateAnimation(lastRotateDegree,rotateDegree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);animation.setFillAfter(true);compassImg.startAnimation(animation);lastRotateDegree=rotateDegree;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}};}



0 0
原创粉丝点击