今天,我将分享一个有效的代码,为您的android设备制作一个非常简单的罗盘应用程序。
某些android设备(例如Huawei Y300和Lenovo P700i)不完全支持运动传感器,因此该代码不适用于它们。

影片示范

我们今天的代码将像这样运行:

所需文件

您需要创建自己的指南针图像。 在此示例中,我使用的是照片。 您的图片必须是透明背景的PNG,请勿使用我使用的jpg文件。

让我们编码

这是我们的MainActivity.java

package com.example.compassapp;import android.app.Activity;
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;
import android.widget.TextView;public class MainActivity extends Activity implements SensorEventListener {// define the display assembly compass pictureprivate ImageView image;// record the compass picture angle turnedprivate float currentDegree = 0f;// device sensor managerprivate SensorManager mSensorManager;TextView tvHeading;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// image = (ImageView) findViewById(R.id.main_iv);// TextView that will tell the user what degree is he headingtvHeading = (TextView) findViewById(R.id.tvHeading);// initialize your android device sensor capabilitiesmSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);}@Overrideprotected void onResume() {super.onResume();// for the system's orientation sensor registered listenersmSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onPause() {super.onPause();// to stop the listener and save batterymSensorManager.unregisterListener(this);}@Overridepublic void onSensorChanged(SensorEvent event) {// get the angle around the z-axis rotatedfloat degree = Math.round(event.values[0]);tvHeading.setText("Heading: " + Float.toString(degree) + " degrees");// create a rotation animation (reverse turn degree degrees)RotateAnimation ra = new RotateAnimation(currentDegree, -degree,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);// how long the animation will take placera.setDuration(210);// set the animation after the end of the reservation statusra.setFillAfter(true);// Start the animationimage.startAnimation(ra);currentDegree = -degree;}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// not in use}
}

我们的布局文件activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#fff" ><TextViewandroid:id="@+id/tvHeading"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginBottom="40dp"android:layout_marginTop="20dp"android:text="Heading: 0.0" /><ImageViewandroid:id="@+id/imageViewCompass"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/tvHeading"android:layout_centerHorizontal="true"android:src="@drawable/img_compass" /></RelativeLayout>

源代码下载

您可以在此处下载此示例项目: CompassApp.zip

一些注意事项

我的应用方向锁定为纵向模式。 清单文件中没有特殊权限。

进一步阅读

  • Android SensorManager
  • Android RotateAnimation
  • Android运动传感器
参考: 《 The Ninja博客》中来自JCG合作伙伴 Mike Dalisay的Android Compass代码示例 。

翻译自: https://www.javacodegeeks.com/2013/09/android-compass-code-example.html

Android指南针代码示例相关推荐

  1. android应用示例代码_Android指南针代码示例

    android应用示例代码 今天,我将分享一个有效的代码,为您的android设备制作一个非常简单的罗盘应用程序. 某些Android设备(例如Huawei Y300和Lenovo P700i)不完全 ...

  2. 【Google Play】从 Android 应用中跳转到 Google Play 中 ( 跳转代码示例 | Google Play 页面的链接格式 | Google Play 免安装体验 )

    文章目录 前言 一.从 Android 应用跳转到 Google Play 代码 二.Google Play 页面的链接格式 三.Google Play 免安装体验 前言 本博客参考资料 链接到 Go ...

  3. 【Android 逆向】函数拦截 ( ARM 架构下的插桩拦截 | 完整代码示例 )

    文章目录 一.ARM 架构下的插桩拦截 二.完整代码示例 一.ARM 架构下的插桩拦截 ARM 架构下的跳转指令 : 下面的二进制数都是十六进制数 ; 323232 位指令 ; 04 F0 1F E5 ...

  4. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入代码示例 )

    文章目录 总结 一.Android 事件依赖注入示例 1.创建依赖注入库 2.声明注解 (1).修饰注解的注解 (2).修饰方法的注解 3.Activity 基类 4.动态代理类调用处理程序 5.依赖 ...

  5. 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )

    文章目录 总结 一.Android 视图依赖注入步骤 二.Android 布局依赖注入示例 1.创建依赖注入库 2.声明注解 3.Activity 基类 4.依赖注入工具类 5.客户端 Activit ...

  6. 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

  7. 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )

    文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...

  8. 【Android 异步操作】HandlerThread 示例 ( 初始化并执行 | 获取Looper | 获取 Handler | 获取消息队列 | 设置空闲队列 | 代码示例 )

    文章目录 一.HandlerThread 初始化 二.HandlerThread 获取Looper 三.HandlerThread 获取消息队列 MessageQueue 四.HandlerThrea ...

  9. 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )

    文章目录 一.自定义线程池使用流程 二.自定义任务拒绝处理策略 三.完整代码示例 在博客 [Android 异步操作]线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTas ...

最新文章

  1. Kubernetes基本概念之Name和NameSpace
  2. httpclient 设置短连接_HTTP长连接、短连接使用及测试
  3. Spring MVC之表单标签
  4. BSTR、char* 和 CString 之间的转换 (转)
  5. iOS不同版本适配问题
  6. javamail发送邮件(转)
  7. logitech鼠标接收器配对
  8. Adobe flash player10安装失败的解决方法
  9. 88个塑胶模具设计中常用的知识点
  10. 情人节程序员用HTML网页表白【表白对话】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  11. 2年工作经验杂谈(java开发)
  12. 【HUSTOJ】1049: 字符图形5-星号梯形
  13. JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,respon 区别
  14. ubuntu 查询uuid_ubuntu
  15. 客户体验模型|客户体验分析的四个关键要素
  16. 如何用html5做个人中心,个人中心页面从思考到设计全过程
  17. Android中的EditText属性说明
  18. Ureport2导出内容加入PDF文件
  19. ueditor统计字数中文_UEditor编辑器 字符数统计和字符数限制 问题
  20. 向 iOS 越狱彻底说再见!

热门文章

  1. 柳比歇夫的时间管理法—《可以量化的管理学》
  2. java连接达梦数据库_【达梦数据库】Activiti连接达梦数据库
  3. Go云原生高性能编程技法,值得观看
  4. 8个免费在线编程游戏网站,让每个人都可以学习编程
  5. PostgreSQL不等于判断
  6. 对一个公益项目的探究(r8笔记第65天)
  7. linux去除文件中重复行,Linux Shell教程 - 如何删除重复的文本行
  8. win7计算机无法连接投影仪,win7系统无法连接投影仪的解决方法
  9. 雷诺手表如何查真假?如何判断雷诺手表是否为真品?
  10. Redis Desktop Manager 黑屏