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 还不能运行,那就说明

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,192评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,896评论 25 708
  • Cascading Windows 为了改善Windows的位置,我们引入Cascading Windows(级联...
    TomatosX阅读 1,348评论 0 0
  • View controllers 通常是 iOS 项目中最大的文件,并且它们包含了许多不必要的代码。所以 View...
    一路上有你Hi阅读 178评论 0 1