安卓方向传感器_自制悬挂式指南针

安卓方向传感器_自制悬挂式指南针调用方向传感器开发简易指南针的原理其实很简单的:先准备一张指南针的图片,该图片上的方向指针指向北方。接下来开发一个检测方向的传感器,程序检测到设备顶部绕Z轴转过多少度,让指南针图片反向转过多少度即可。由此可见,指南针应用只要在界面中添加一张图片,并让图片总是反向转过方向传感器返回的第一个角度值即可。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

调用方向传感器开发简易指南针的原理其实很简单的:先准备一张指南针的图片,该图片上的方向指针指向北方。接下来开发一个检测方向的传感器,程序检测到设备顶部绕Z轴转过多少度,让指南针图片反向转过多少度即可。由此可见,指南针应用只要在界面中添加一张图片,并让图片总是反向转过方向传感器返回的第一个角度值即可。

  • layout/activity_main.xml界面布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:orientation="vertical">

    <ImageView  android:id="@+id/compassImage" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitCenter" android:src="@drawable/compass" />

</LinearLayout>
  • MainActivity.java逻辑代码如下:
package com.fukaimei.compass;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements SensorEventListener { 
   

    // 定义显示指南针的图片
    ImageView compassImage;
    // 记录指南针图片转过的角度
    float currentDegree = 0f;
    // 定义Sensor管理器
    SensorManager mSensorManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取界面中显示指南针的图片
        compassImage = (ImageView) findViewById(R.id.compassImage);
        // 获取传感器管理服务
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 为系统的方向传感器注册监听器
        mSensorManager.registerListener(this,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
                SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    protected void onPause() {
        // 取消注册
        mSensorManager.unregisterListener(this);
        super.onPause();
    }

    @Override
    protected void onStop() {
        // 取消注册
        mSensorManager.unregisterListener(this);
        super.onStop();
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // 获取触发event的传感器类型
        int sensorType = event.sensor.getType();
        if (sensorType == Sensor.TYPE_ORIENTATION) {
            // 获取绕Z轴转过的角度
            float degree = event.values[0];
            // 创建旋转动画(反向转过degree度)
            RotateAnimation ra = new RotateAnimation(currentDegree, -degree,
                    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            // 设置动画的持续时间
            ra.setDuration(200);
            // 运行动画
            compassImage.startAnimation(ra);
            currentDegree = -degree;
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}

指南针程序的关键代码就是下面程序中的代码,该程序检测到手机绕Z轴转过的角度,然后让指南针图片反向转过相应的角度即可。

// 创建旋转动画(反向转过degree度)
            RotateAnimation ra = new RotateAnimation(currentDegree, -degree,
                    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
  • 注意:该应用必须在有方向传感器的真机中安装运行才能看到效果。

  • Demo程序运行效果界面截图如下:

这里写图片描述这里写图片描述这里写图片描述这里写图片描述


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187847.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • angular框架如何实现父子组件传值、非父子组件传值

    angular框架如何实现父子组件传值、非父子组件传值文章目录1.理解父子组件、非父子组件2.父组件给子组件传值–@input3.父组件通过@ViewChild主动获取子组件的数据和方法4.非父子组件如何传递数据1.理解父子组件、非父子组件什么是父子组件?组件的父子关系是相对来说的,即在一个A组件中嵌入了B组件,那么在这一层关系中,A组件是B组件的父组件,B组件是A组件的子组件。看下面两幅图即可理解:app.component.html与普通组件的关系:普通组件与普通组件:现在应该知道父子组件是什么关系了,关键看谁嵌入了谁那里。父子组件

  • springboot的启动流程及原理_精馏的原理及流程

    springboot的启动流程及原理_精馏的原理及流程1.springboot的启动类入口@SpringBootApplication@ComponentScan(basePackages={“cn”})publicclassSpringBootDemo{publicstaticvoidmain(String[]args){SpringApplication.run(SpringBootDemo.class);}}可以看出,Annotation定义(@SpringBootApplicati

  • Win10安装CUDA10和cuDNN「建议收藏」

    Win10安装CUDA10和cuDNN「建议收藏」官方安装教程CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.htmlcuDNN:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindowsWIN10安装CUDA10CUDA…

  • SpringMvc 最新jar包下载[通俗易懂]

    SpringMvc 最新jar包下载[通俗易懂]下载springmvcJar最终下载地址:https://repo.spring.io/simple/libs-release-local/org/springframework/spring/步骤:https://repo.spring.io/simple/libs-release-local/https://repo.spring.io/simple/libs…

  • jquery监听浏览器刷新_jQuery刷新浏览器页面大小

    jquery监听浏览器刷新_jQuery刷新浏览器页面大小jquery监听浏览器刷新基本代码段,用于在使用JavaScript调整浏览器大小的情况下刷新页面。//refreshpageonbrowserresize$(window).bind(‘resize’,function(e){console.log(‘windowresized..’);this.location.reload(false);/*false…

  • 代理服务器基本知识[通俗易懂]

    代理服务器基本知识[通俗易懂]代理服务器系列(一):基础知识2005年9月10日世界网络教研组编一、什么是代理服务器?代理服务器英文全称是ProxyServer,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,需送出Request信号来得到回答,然后对方再把信息以bit方

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号