if(Math.abs(pitch)<=k){
mv.zuo2_Y=mv.zuo1_Y //左面的
+ (int)(((mv.zuoBitmap1.getHeight()
-mv.zuoBitmap2.getHeight())/2.0)
+(((mv.zuoBitmap1.getHeight()
-mv.zuoBitmap2.getHeight())/2.0)*pitch)/k);
y =mv.zhong1_Y+ //中間的
(int)(((mv.zhongBitmap1.getHeight()
-mv.zhongBitmap2.getHeight())/2.0)
+(((mv.zhongBitmap1.getHeight()
-mv.zhongBitmap2.getHeight())/2.0)*pitch)/k);
}else if(pitch>k){
mv.zuo2_Y=mv.zuo1_Y
+mv.zuoBitmap1.getHeight()
-mv.zuoBitmap2.getHeight();
y=mv.zhong1_Y+mv.zhongBitmap1.getHeight()
-mv.zhongBitmap2.getHeight();
}else{
mv.zuo2_Y = mv.zuo1_Y; y = mv.zhong1_Y;
}
//下面的
tempX = -(int) (((mv.xiaBitmap1.getWidth()/2-28)*roll
+(mv.xiaBitmap1.getWidth()/2-28)*pitch)/k);
tempY = -(int) ((-(mv.xiaBitmap1.getWidth()/2-28)*roll
-(mv.xiaBitmap1.getWidth()/2-28)*pitch)/k);
//限制下面的氣泡范圍
if(tempY>mv.xiaBitmap1.getHeight()/2-28){
tempY = mv.xiaBitmap1.getHeight()/2-28;
}
if(tempY < -mv.xiaBitmap1.getHeight()/2+28){
tempY = -mv.xiaBitmap1.getHeight()/2+28;
}
if(tempX > mv.xiaBitmap1.getWidth()/2-28){
tempX = mv.xiaBitmap1.getWidth()/2-28;
}
if(tempX < -mv.xiaBitmap1.getWidth()/2+28){
tempX = -mv.xiaBitmap1.getWidth()/2+28;
}
mv.xia2_X = tempX + mv.xia1_X
+ mv.xiaBitmap1.getWidth()/2
-mv.xiaBitmap2.getWidth()/2;
mv.xia2_Y = tempY + mv.xia1_Y
+ mv.xiaBitmap1.getHeight()/2
- mv.xiaBitmap2.getWidth()/2;
if(isContain(x, y)){//中間的水泡在圓內才改變坐標
mv.zhong2_X = x; mv.zhong2_Y = y;
}
mv.postInvalidate();//重繪MainView
}
}
在onSensorChanged 方法中首先得到pitch 軸以及roll 軸的數值, 然后根據該數值的大小調整水泡在屏幕中的位置, 同時需要對水泡的坐標進行判斷, 使其保持在自身所在外框的范圍內。
此時運行該程序, 并保證測試工具Sensorsimulator 與Android模擬器的連通, 便會觀察到如圖1 所示的效果, 通過Sensorsimulator 工具模擬手機的姿態的改變, 屏幕中的水泡便隨之向高處運動。
8 程序發布
完成了所有代碼的開發后, 就可以將應用程序打包發布了。本案例中只需將Eclipse 工具自動生成的apk 文件拷出即可, 按如下步驟操作。
(1) 進行正式發布之前首先需要將代碼中注釋為"測試時使用" 的兩處代碼刪掉, 并將注釋為"真機使用" 代碼的注釋去掉。
(2) 完成代碼的修改后重新構建項目。
(3) 打開項目文件夾下的bin 目錄, 其中名為SPY 的apk文件便為本應用程序的安裝包。
(4) 將SPY.apk 文件拷貝到支持傳感器的Android 手機中運行即可完成本應用程序的安裝。
9 結語
通過開發基于Android 平臺的傳感器應用---水平儀程序, 讀者應該對Android 程序的開發有了一定的了解, 同時讀者也應該了解到在Android 平臺下使用傳感器來豐富自己軟件的功能是十分方便的。
評論
查看更多