1传感器概念
图片资源来自传智播客张泽华视频114集
demo
1布局一张图片 网上随便找一张指南针图片
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/point" />
</RelativeLayout>
2MainActivity
package com.example.a114pointer;
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.app.Activity;
public class MainActivity extends Activity {
// 本例要在真机运行
private SensorManager sensorManager;
private MyListener listener;
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SENSOR_SERVICE传感器服务
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// 得到设备默认传感器 SENSOR_ORIENTATION:方向传感器
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
listener = new MyListener();
iv = (ImageView) findViewById(R.id.iv);
// 注册传感器 paras 1listener 2sensor指定使用哪个传感器 3rate传感器取样频率 频率大精度高耗电大
sensorManager.registerListener(listener, sensor,
SensorManager.SENSOR_DELAY_UI);
}
private class MyListener implements SensorEventListener {
float startAngle = 0;
@Override
public void onSensorChanged(SensorEvent event) {
// 当sensor传感器数据发生变化时调用
// 方向传感器values[0]代表实际与地磁场正北夹角 夹角为0-正北 夹角90-正东
float[] values = event.values;
float angle = values[0];
// Toast.makeText(MainActivity.this, "与正北夹角"+angle,
// Toast.LENGTH_SHORT).show();
System.out.println("与正北夹角" + angle);
RotateAnimation ra = new RotateAnimation(startAngle, angle,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
ra.setDuration(1000);
iv.startAnimation(ra);
startAngle = -angle;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// 精确度变化(外部和内部因素)时调用
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
// 一定要解除注册 否则一直耗电
sensorManager.unregisterListener(listener);
listener = null;
super.onDestroy();
}
}
经测试,本人手机角度一直停留在315° 左右,原因不明,其他两部手机测试正常 有发现问题请告知我