Android利用传感器(传感器)实现水平仪功能

  

这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体、液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端。
  

  

利用方向传感器返回的第一个参数,实现了一个指南针小应用。
  

  

我的Android进阶之旅- - - - - -在Android利用传感器(传感器)实现指南针功能
  

  

接下来,我们利用返回的第二,三个参数实现该水平仪。因为第二个参数,反映底部翘起的角度(当顶部翘起时为负值),第三个参数可以反映右侧翘起的角度(当左侧翘起时为负值)。根据这两个角度就可以开发水平仪,实现手机哪端翘起,气泡就浮向哪端,这也是水平仪的实现思想。本实例来自于《疯狂Android讲义》
  

  

先来看下运行效果:

  

 Android利用传感器(传感器)实现水平仪功能“> <img src=

  

该程序自定义了一个观点,用来绘制透明圆盘和气泡,其中气泡的位置会动态改变。自定义视图代码如下:

  

MyView。java
  

        包org.crazyit.sensor;      进口android.content.Context;   进口android.graphics.Bitmap;   进口android.graphics.BitmapFactory;   进口android.graphics.Canvas;   进口android.util.AttributeSet;   进口android.view.View;      公开课MyView延伸查看{//定义水平仪仪表盘图片   位图;//定义水平仪中的气泡图标   位图泡沫;//定义水平仪中气泡的X, Y座标   int bubbleX bubbleY;      公共MyView(上下文语境,AttributeSet attrs) {   超级(上下文,attrs);//加载水平仪图片和气泡图片=BitmapFactory.decodeResource (getresource (), R.drawable.back);   泡沫=BitmapFactory   .decodeResource (getresource (), R.drawable.bubble);   }      @Override   保护空白>   & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; FrameLayout xmlns: android=" http://schemas.android.com/apk/res/android "   android:取向=按怪薄?   android: layout_width="宽和"   android: layout_height="宽和"   android:背景=" # fff”   比;   & lt; org.crazyit.sensor.MyView   android: id=癅 + id/显示”   android: layout_width="宽和"   android: layout_height="宽和"/比;   & lt;/FrameLayout>      之前      

素材:   

泡沫。png:  Android利用传感器(传感器)实现水平仪功能

  

。png:  Android利用传感器(传感器)实现水平仪功能

  

Gradienter.java         包org.crazyit.sensor;      进口android.app.Activity;   进口android.hardware.Sensor;   进口android.hardware.SensorEvent;   进口android.hardware.SensorEventListener;   进口android.hardware.SensorManager;   进口android.os.Bundle;      公共类水平仪扩展活动实现SensorEventListener {//定义水平仪的仪表盘   MyView显示;//定义水平仪能处理的最大倾斜的角,超过该角度,气泡将直接在位于边界。   int MAX_ANGLE=30;//定义传感器管理器   SensorManager mSensorManager;      @Override   公共空间>   & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt;清单xmlns: android=" http://schemas.android.com/apk/res/android "   包=" org.crazyit.sensor "   android: versionCode=" 1 "   android: versionName=" 1.0 "比;   & lt; uses-sdk   android: minSdkVersion=" 10 "   android: targetSdkVersion=?7”/比;=& lt;应用android:图标“@drawable/ic_launcher”android:标签=癅string/app_name”比;   & lt;活动android: name=" .Gradienter "   android: label=" @string/app_name”比;   & lt; intent-filter>   & lt;行动android: name=" android.intent.action.MAIN "/比;   & lt;类别android: name=" android.intent.category.LAUNCHER "/比;   & lt;/intent-filter>   & lt;/activity>   & lt;/application>   & lt;/manifest>

Android利用传感器(传感器)实现水平仪功能