新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Android嵌入式平臺傳感器應用開發水平儀

        基于Android嵌入式平臺傳感器應用開發水平儀

        作者: 時間:2012-04-16 來源:網絡 收藏

        inttempy=(int)(y+mv。zhongBitmap2。getWidth()/2。0);

        本文引用地址:http://www.104case.com/article/149233.htm

        intox=(int)(mv。zhong1_X+mv。zhongBitmap1。getWidth()/2。0);

        intoy=(int)(mv。zhong1_X+mv。zhongBitmap1。getWidth()/2。0);

        if(Math。sqrt((tempx-ox)*(tempx-ox)+(tempy-oy)*(tempy-oy))>(mv。zhongBitmap1。getWidth()/2。0-mv。zhongBitmap2。getWidth()/2。0)){//不在圓內returnfalse;

        }else{//在圓內時

        returntrue;

        }

        }

        };

        監聽類中,onSensorChanged方法用于監聽采樣值的變化,例如手機姿態的改變等。上述代碼中的is-Contain方法用于判斷界面中間的氣泡是否出界,若出界則返回false。

        完成了代碼框架的開發后,便可以對的監聽方法onSensorChanged進行開發了,其詳細代碼如下:

        publicvoidonSensorChanged(intsensor,float[]values){

        if(sensor==SensorManager。SENSOR_ORIENTATION){

        doublepitch=values[SensorManager。DATA_Y];

        doubleroll=values[SensorManager。DATA_Z];

        intx=0;inty=0;//臨時變量,算中間水泡坐標時用

        inttempX=0;inttempY=0;//下面氣泡的臨時變量

        //開始調整x的值

        if(Math。abs(roll)=k){

        mv。shang2_X=mv。shang1_X//上面的

        +(int)(((mv。shangBitmap1。getWidth()

        -mv。shangBitmap2。getWidth())/2。0)

        -(((mv。shangBitmap1。getWidth()

        -mv。shangBitmap2。getWidth())/2。0)*roll)/k);

        x=mv。zhong1_X//中間的

        +(int)(((mv。zhongBitmap1。getWidth()

        -mv。zhongBitmap2。getWidth())/2。0)

        -(((mv。zhongBitmap1。getWidth()

        -mv。zhongBitmap2。getWidth())/2。0)*roll)/k);

        }elseif(roll>k){

        mv。shang2_X=mv。shang1_X;x=mv。zhong1_X;

        }else{

        mv。shang2_X=mv。shang1_X+

        mv。shangBitmap1。getWidth()

        -mv。shangBitmap2。getWidth();

        x=mv。zhong1_X+mv。zhongBitmap1。getWidth()

        -mv。zhongBitmap2。getWidth();

        }

        //開始調整y的值

        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);

        }elseif(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與模擬器的連通,便會觀察到如圖1所示的效果,通過Sensorsimulator工具模擬手機的姿態的改變,屏幕中的水泡便隨之向高處運動。

        8程序發布

        完成了所有代碼的開發后,就可以將應用程序打包發布了。本案例中只需將Eclipse工具自動生成的apk文件拷出即可,按如下步驟操作。

        (1)進行正式發布之前首先需要將代碼中注釋為測試時使用的兩處代碼刪掉,并將注釋為真機使用代碼的注釋去掉。

        (2)完成代碼的修改后重新構建項目。

        (3)打開項目文件夾下的bin目錄,其中名為SPY的apk文件便為本應用程序的安裝包。

        (4)將SPY。apk文件拷貝到支持傳感器的手機中運行即可完成本應用程序的安裝。

        9結語

        通過開發的傳感器應用---儀程序,讀者應該對Android程序的開發有了一定的了解,同時讀者也應該了解到在Android下使用傳感器來豐富自己軟件的功能是十分方便的。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宁德市| 六枝特区| 苏尼特左旗| 沾益县| 石门县| 忻州市| 南皮县| 沙河市| 油尖旺区| 读书| 策勒县| 英山县| 乌拉特前旗| 南宁市| 调兵山市| 正蓝旗| 阳山县| 健康| 蓝山县| 徐水县| 宣城市| 璧山县| 曲沃县| 即墨市| 个旧市| 阿尔山市| 呈贡县| 芷江| 原平市| 永定县| 莲花县| 荥经县| 阳江市| 武威市| 开阳县| 揭西县| 井冈山市| 东港市| 汾阳市| 息烽县| 湖南省|