【Android开发基础】传感器(方向传感器、加速度传感器)

news2024/12/22 17:08:50

文章目录

    • 一、引言
    • 二、设计
      • 1、指南针(方向传感器)
        • (1)效果
        • (2)UI设计
        • (3)功能设计
      • 2、摇一摇(加速度传感器)
        • (1)效果
        • (2)UI设计
        • (3)功能设计
    • 三、附件

一、引言

  • 描述:传感器是机器产品的重要组成,一件拥有传感器的产品,才能更加具备“情感”。就比如地图导航类产品,就需要用到多种传感器(方向传感器、磁场传感器、加速度传感器等)。传感器的存在,能够更好的表达出用户无法用语言详细描述的需求。
  • 难度:中级
  • 知识点:
    1、方向传感器
    2、加速度传感器
    3、Animation动画
  • 例子:指南针、摇一摇

二、设计

虚拟机没有传感器,所以传感器功能需要使用真机来进行模拟。

1、指南针(方向传感器)

(1)效果

在这里插入图片描述

(2)UI设计

建议:关于ImageView中src图片路径,最好是选择一张有方向感的图片(比如:箭头、等腰三角形)。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/image_znz"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        android:src="@drawable/znz"/>

</RelativeLayout>

(3)功能设计

注册传感器监听器

    SensorManager mSensorManager; //管理器
    
    @Override
    protected void onResume(){
        super.onResume();
        mSensorManager.registerListener(mylistenner
                , mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);
    }

传感器事件侦听器

    ImageView image;  //指南针图片
    float currentDegree = 0f; //指南针图片转过的角度
    Mylistenner  mylistenner =new Mylistenner();

	public  class Mylistenner implements SensorEventListener{
        
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {  //传感器值改变
            // TODO Auto-generated method stub

        }
        
        @Override
        public void onSensorChanged(SensorEvent event) {  //精度改变
            // TODO Auto-generated method stub
            //获取触发event的传感器类型
            int sensorType = event.sensor.getType();

            switch(sensorType){
                case Sensor.TYPE_ORIENTATION:
                    float degree = event.values[0]; //获取z转过的角度
                    //穿件旋转动画
                    RotateAnimation ra = new RotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f
                            ,Animation.RELATIVE_TO_SELF,0.5f);
                    ra.setDuration(100);//动画持续时间
                    image.startAnimation(ra);
                    currentDegree = -degree;
                    break;

            }
        }
    }

初始化代码

        image = (ImageView)findViewById(R.id.image_znz);
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); //获取管理服务

2、摇一摇(加速度传感器)

(1)效果

在这里插入图片描述

(2)UI设计

建议:最好是将一张完整的图片,一分为二。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#404445"
    android:gravity="center"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/image_sha"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/sha"/>

    <ImageView
        android:id="@+id/image_xia"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/xia"
        android:layout_below="@+id/image_sha"/>

</RelativeLayout>

动画一 translate_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0.0"
        android:fromYDelta="0.0"
        android:toXDelta="0.0"
        android:toYDelta="100"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:duration="1000"/>
</set>

动画二 translatex_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0.0"
        android:fromYDelta="0.0"
        android:toXDelta="0.0"
        android:toYDelta="-100"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:duration="1000" />
</set>

(3)功能设计

AndroidManifest.xml 注册权限

<uses-permission android:name="android.permission.VIBRATE" />

加速度传感器注册监听器

	private SensorManager sensorManager;  //定义传感器管理器
	
    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(this,sensor , SensorManager.SENSOR_DELAY_GAME);
    }

传感器事件侦听器

    @Override
    public void onSensorChanged(SensorEvent event) {

        float[] values = event.values;  //获取传感器X、Y、Z三个轴的输出信息
        int sensorType = event.sensor.getType();  // 获取传感器类型
        if (sensorType == Sensor.TYPE_ACCELEROMETER) {  //如果是加速度传感器
            //X轴输出信息>15,Y轴输出信息>15,Z轴输出信息>20
            if (values[0] > 15 || values[1] > 15 || values[2] > 20) {
                //动画向上
                Animation translate_sha = AnimationUtils.loadAnimation(this,R.anim.translatex_anim);
                sha.startAnimation(translate_sha);
                //动画向下
                Animation translate_xia = AnimationUtils.loadAnimation(this,R.anim.translate_anim);
                xia.startAnimation(translate_xia);
                Toast.makeText(MainActivity.this, "不好意思,摇晚了!!", Toast.LENGTH_SHORT).show();
                vibrator.vibrate(500);                    //设置振动器频率
                sensorManager.unregisterListener(this);  //取消注册监听器
            }
        }

    }

三、附件

(CSDN下载地址)
 
方向传感器:https://download.csdn.net/download/weixin_48916759/87916890
 
加速度传感器:https://download.csdn.net/download/weixin_48916759/87916891
 
(Gitee下载地址)
 
方向传感器:https://gitee.com/xu-pq/android-demo/tree/master/zhinanzhen
 
加速度传感器:https://gitee.com/xu-pq/android-demo/tree/master/yaoyiyao

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华硕天选2ubuntu18.04升级内核后黑屏

https://piaoyun.cc/post/26957.html 1.开机&#xff0c;进入grub画面 2.按’‘‘e’’’ 进入编辑开机指令的模式,同样找到’‘‘quite splash’’,并在后面加上对应的字。 1.Intel 82852/82855 或8系列显示晶片&#xff1a;i915.modeset1或i915.modeset0 2.Nvidia&#xff…

SpringBoot集成支付宝支付 - 少走弯路就看这篇

最近在做一个网站&#xff0c;后端采用了SpringBoot&#xff0c;需要集成支付宝进行线上支付&#xff0c;在这个过程中研究了大量支付宝的集成资料&#xff0c;也走了一些弯路&#xff0c;现在总结出来&#xff0c;相信你读完也能轻松集成支付宝支付。 在开始集成支付宝支付之前…

【神经网络】梯度检测

在神经网络中&#xff0c;使用前向或者反向传播计算后&#xff0c;再使用梯度下降去寻找代价函数最小时 θ \theta θ的取值是一个可行的方法&#xff0c;但是它很容易出错&#xff1a;因为在这个算法中含有海量的细节&#xff0c;容易产生微小而又难以察觉的bug。即便是存在bu…

为什么 Serverless 能提升资源利用率?

作者&#xff1a;木吴 阿里云智能高级技术专家 业务的负载往往不是一成不变的&#xff0c;而是随着时间呈现一定的上下波动。传统的应用构建方式一般是备足充分的资源以保障业务可用性&#xff0c;造成资源利用率不高的现象。随着容器技术的普及&#xff0c;应用可以通过弹性伸…

二叉树相关OJ练习题(1、锯齿形层序遍历 2、二叉搜索子树的最大键值和 3、验证二叉树 4、剑指 Offer II 047. 二叉树剪枝)

接上次博客&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/130934670​​​​​​ 目录 1、锯齿形层序遍历 2、二叉搜索子树的最大键值和 3、验证二叉树 4、剑指 Offer II 047. 二叉树剪枝 最近临近期末&#xff0c;忙得焦头烂额的…… 天天都是高数、微观经济…

疫情下基于Java的居民购菜平台设计+第六稿+文档

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 疫情下基于Java的居民购菜平台设计第六稿文档 视频演示 视频去哪了呢&#xff1f;_哔哩哔哩_bilibili 系统介绍 疫情下基于Java的居民购菜平台设计 …

uniapp设置滚动条滚动到指定位置

场景&#xff1a;左侧菜单栏&#xff0c;每次切换时&#xff0c;需要右侧商品展示区保持滚动条及页面在最顶部 1.利用scroll-view 中scroll-top属性实现 1.1设置scrollToTop属性为0 data() {return {// 保证每次切换&#xff0c;滚动条位置都在最顶部scrollToTop: 0,}; } 1.…

实验篇(7.2) 13. 站对站安全隧道 - 仅一方发起连接(FortiGate-IPsec) ❀ 远程访问

【简介】上一篇实验发现&#xff0c;两端都是可以远程的公网IP的话&#xff0c;两端防火墙都可以发出连接请求&#xff0c;并且都能够连通。这样的好处是安全隧道不用随时在线&#xff0c;只在有需求时才由发起方进行连接。但是现实中很多情况下只有一端公网IP可以远程&#xf…

C++语言与C的不同之处

头文件 C语言的引用头文件的方式是include名字.h的方式进行引用&#xff0c;而C去掉了.h&#xff0c;但是又是完全兼容C语言的。在库前面添加一个c来表明这个库是来自于C语言的。 //C语言的方法&#xff1a;带.h的方式进行include #include<stdio.h> #include<math.…

Python实现PSO粒子群优化支持向量机分类模型(svc算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法&#xff08;Particle Swarm Optimization&#xff09;的英文缩写&#xff0c;是一…

DevChat 上线 VSCode 插件!国内开源的 AI 编程,做不被 AI 取代的新程序员!

打不过就加入。与其担心被 AI 取代&#xff0c;不如现在就学习驾驭它。 &#xff08;要用 AI 来辅助写代码&#xff0c;国际主流的几个大语言模型的表现都不尽如人意&#xff0c;谁用谁知道……除了 Claude 我们还在测试中。于是&#xff0c;我们基于大语言模型&#xff0c;做…

数据指北 AI

大家好&#xff0c;我是脚丫先生 (o^^o) &#x1f604; &#x1f600; 与GPT-AI聊天是一件很有趣的事情&#xff01; 最近一直没更新&#xff0c;在忙于研究搭建GPT~~~搭建了一个可以二开的数据指北AI。 目前模型是用的GPT3&#xff0c;有点不精准。 鲁迅和周树人的关系都搞…

阿里云数据库PolarDB MySQL版倚天ARM架构详解

阿里云云原生数据库PolarDB MySQL版推出倚天ARM架构&#xff0c;倚天ARM架构规格相比X86架构规格最高降价45%&#xff0c;PolarDB针对自研倚天芯片&#xff0c;从芯片到数据库内核全链路优化&#xff0c;助力企业降本增效。基于阿里云自研的倚天服务器&#xff0c;同时在数据库…

html2canvas给指定区域添加满屏水印

效果图如下&#xff1a; 直接贴上代码 下载插件&#xff1a; npm i html2canvas <template><div ref"imageDom"><el-button click"downloadPicture">下载</el-button><div><el-tableclass"tableX":height&q…

JUC并发编程:Condition的简单理解与使用

目录 1&#xff1a;概述 2&#xff1a;举例 3&#xff1a;condition 的一些方法 1&#xff1a;概述 Condition本质上是一个接口&#xff0c;Condition因素与Object监视器方法&#xff08; wait &#xff0c; notify和notifyAll &#xff09;成不同的对象&#xff0c;以得到具…

医院信息化PACS系统源码(影像阅片、报告模板、三维重建)

随着互联网强势走进医院行业&#xff0c;医院信息化建设已成为推动医院机构正常运转和进行现代化管理的基本要素。影像检查作为医院机构在疾病诊断中的高频诊疗项目&#xff0c;业务量自然不容小觑&#xff0c;为减轻医生工作压力&#xff0c;PACS系统成为机构“必选项”。 一、…

sheetJS实现把excel导入数据库

1、问题描述 最近在做报表导入数据库的需求&#xff0c;报表文件为excel里面有多个sheet。 2、解决方法 使用FileReader异步读取上传的文件。使用sheet.js进行excel表格内容的解析。使用bootstrap.js的tab组件对上传的表格进行一个页面预览的展示。 3、参考代码 ImportReportF…

Linux 文件实时备份 rsync+lsyncd

一、原理和说明 lsyncd官网 &#xff08;一&#xff09;软件说明 目的是每次只把新修改的同步&#xff0c;而不是全量备份。 Rsync&#xff08;同步&#xff09;&#xff1a;将一个服务器的一个文件夹的内容提交到另外一个服务器的文件夹 lsyncd&#xff08;差异检测并调用r…

Java阶段四Day06

Java阶段四Day06 文章目录 Java阶段四Day06关于配置响应内容中不包含Null的属性关于配置跨域关于如何不用添加RequestBody也可以接收请求 关于配置响应内容中不包含Null的属性 响应内容中的null可以使用以下三种方式中的一种即可解决&#xff0c;且范围越小&#xff0c;越优先 …

新人如何在实际工作做性能测试?怎么合理选择并发数?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 从小入手&#xf…