这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体、液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端。
利用方向传感器返回的第一个参数,实现了一个指南针小应用。
我的Android进阶之旅- - - - - -在Android利用传感器(传感器)实现指南针功能
接下来,我们利用返回的第二,三个参数实现该水平仪。因为第二个参数,反映底部翘起的角度(当顶部翘起时为负值),第三个参数可以反映右侧翘起的角度(当左侧翘起时为负值)。根据这两个角度就可以开发水平仪,实现手机哪端翘起,气泡就浮向哪端,这也是水平仪的实现思想。本实例来自于《疯狂Android讲义》
先来看下运行效果:
该程序自定义了一个观点,用来绘制透明圆盘和气泡,其中气泡的位置会动态改变。自定义视图代码如下:
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:
。png:
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利用传感器(传感器)实现水平仪功能