Android指南针实现

功能实现:通过指南针传感器获得转动角度,设置指南针图片的转动动画即可

  1. 获取系统 SensorManager 来进行传感器设置(变量已声明)
    private Sensor sensor;
    private SensorManager sensorManager;
    private ImageView ivCompass;//指南针图片
    private float fromDegrees = 0f, toDegrees;//图片转动时开始、结束角度

    @Override
    protected void onResume() {
        super.onResume();
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        //通过 getDefaultSensor 获得指南针传感器
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
        //为传感器管理者注册监听器,第三个参数指获取速度正常
        sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

为了提高app运行效率,将此段代码放在 onResume() 方法中,只在要呈现界面的时候执行

2.让 Activity 实现 SensorEventListener ,并复写 onSensorChanged 和 onAccuracyChanged 方法,我们只需在 onSensorChanged 方法中完善逻辑


    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {

        switch (sensorEvent.sensor.getType()){
            case Sensor.TYPE_ORIENTATION:
                //顺时针转动为正,故手机顺时针转动时,图片得逆时针转动
                toDegrees = -sensorEvent.values[0];
                //让图片相对自身中心点转动,开始角度默认为0;此后开始角度等于上一次结束角度
                RotateAnimation ra = new RotateAnimation(fromDegrees, toDegrees, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                //动画时间200毫秒
                ra.setDuration(200);
                ra.setFillAfter(true);
                ivCompass.startAnimation(ra);
                fromDegrees = toDegrees;
                break;
        }
    }

setFillAfter参数为true:每次动画结束,就停留在结束时的样子
      为false:每次动画结束,就回到动画开始时的样子

3.为了使App退出当前界面时停止使用传感器,在 onPause() 方法中加入

    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);
    }

参数为this,即为注销所有监听器,其他参数可以选择某一个监听器

所有这些做完之后,如果 App 还不能运行,那就说明

扔了你的破机子吧。连指南针传感器都木有!!!

你可能感兴趣的:(Android指南针实现)