北大青鸟武汉宏鹏鲁广校区老师解读:Android利用Sensor实现指南针功能
step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中
step2:设计应用的UI界面,main.xml
1234567891011121314 | <?xml version= "1.0" encoding= "utf-8" ?> <LinearLayout xmlns:android= "//schemas.android.com/apk/res/android"
android:orientation= "vertical"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent"
android:gravity= "center"
> <ImageView
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:src= "@drawable/compass"
android:id= "@+id/imageView"
/> </LinearLayout> |
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | package cn.roco.sensor;
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;
public class MainActivity extends Activity {
private ImageView imageView;
/** 传感器管理器 */
private SensorManager manager;
private SensorListener listener = new SensorListener();
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) this .findViewById(R.id.imageView);
imageView.setKeepScreenOn( true ); //屏幕高亮
//获取系统服务(SENSOR_SERVICE)返回一个SensorManager 对象
manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
@Override
protected void onResume() {
/**
* 获取方向传感器
* 通过SensorManager对象获取相应的Sensor类型的对象
*/
Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
//应用在前台时候注册监听器
manager.registerListener(listener, sensor,
SensorManager.SENSOR_DELAY_GAME);
super .onResume();
}
@Override
protected void onPause() {
//应用不在前台时候销毁掉监听器
manager.unregisterListener(listener);
super .onPause();
}
private final class SensorListener implements SensorEventListener {
private float predegree = 0 ;
@Override
public void onSensorChanged(SensorEvent event) {
/**
* values[0]: x-axis 方向加速度
values[1]: y-axis 方向加速度
values[2]: z-axis 方向加速度
*/
float degree = event.values[ 0 ]; // 存放了方向值
/**动画效果*/
RotateAnimation animation = new RotateAnimation(predegree, degree,
Animation.RELATIVE_TO_SELF, 0 .5f,Animation.RELATIVE_TO_SELF, 0 .5f);
animation.setDuration( 200 );
imageView.startAnimation(animation);
predegree=-degree;
/**
float x=event.values[SensorManager.DATA_X];
float y=event.values[SensorManager.DATA_Y];
float z=event.values[SensorManager.DATA_Z];
Log.i("XYZ", "x="+(int)x+",y="+(int)y+",z="+(int)z);
*/
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
} } |
123456789101112131415161718 | <?xml version= "1.0" encoding= "utf-8" ?> <manifest xmlns:android= "//schemas.android.com/apk/res/android"
package = "cn.roco.sensor"
android:versionCode= "1"
android:versionName= "1.0" >
<uses-sdk android:minSdkVersion= "8" />
<application android:icon= "@drawable/icon" android: label = "@string/app_name" >
<activity android:name= "MainActivity"
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> |
本文标题:安卓培训:Android利用Sensor实现指南针功能,责任编辑:宏鹏,来源:武汉北大青鸟鲁广校区栏目,于04-18发布于北大青鸟鲁广校区。Android利用Sensor实现指南针功能
预约将免费领取7天课程体验卡
只为您方便就学
专业老师24小时1对1学习指导
定制专属于你的专属学习方案
微信号:17740513250
微信号:17740513250