基于A(yíng)ndroid嵌入式平臺傳感器應用開(kāi)發(fā)水平儀
//繪制左面方框中的刻度
canvas。drawLine(zuo1_X,zuo1_Y+zuoBitmap1。getHeight()/2-7,zuo1_X+zuoBitmap1。getWidth()-2,zuo1_Y+zuoBitmap1。getHeight()/2-7,paint);canvas。drawLine(zuo1_X,zuo1_Y+zuoBitmap1。getHeight()/2+7,zuo1_X+zuoBitmap1。getWidth()-2,zuo1_Y+zuoBitmap1。getHeight()/2+7,paint);
//繪制下面方框中的刻度
canvas。drawLine(xia1_X+xiaBitmap1。getWidth()/2-10,xia1_Y+xiaBitmap1。getHeight()/2-20,xia1_X+xiaBitmap1。getWidth()/2+20,xia1_Y+xiaBitmap1。getHeight()/2+10,paint);
canvas。drawLine(xia1_X+xiaBitmap1。getWidth()/2-20,xia1_Y+xiaBitmap1。getHeight()/2-10,xia1_X+xiaBitmap1。getWidth()/2+10,xia1_Y+xiaBitmap1。getHeight()/2+20,paint);
//中間圓圈中的刻度(小圓)
RectFoval=newRectF(zhong1_X+zhongBitmap1。getWidth()/2-10,zhong1_Y+zhongBitmap1。getHeight()/2-10,zhong1_X+zhongBitmap1。getWidth()/2+10,zhong1_Y+zhongBitmap1。getHeight()/2+10);
canvas。drawOval(oval,paint);//繪制基準線(xiàn)(圓)
}
在該方法中,根據相應圖片的X、Y坐標將圖片繪制到屏幕中,在圖片的繪制過(guò)程中,同樣動(dòng)態(tài)根據相應圖片的寬和高計算需要繪制到的位置坐標,以提高程序的可維護性與靈活性。
6相關(guān)XML文件的編寫(xiě)
完成了用于顯示水平儀界面的自定義View的Java代碼開(kāi)發(fā)之后,就應該對布局XML資源文件進(jìn)行編寫(xiě),以將之前開(kāi)發(fā)的自定義View添加到用戶(hù)界面中。打開(kāi)項目中res/layout目錄下的main。xml,在其中編寫(xiě)如下的xml代碼:
?xmlversion=1。0encoding=utf-8?>!--編碼格式-->
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent>!--線(xiàn)性布局-->
android:id=@+id/mainView
android:layout_width=fill_parent
android:layout_height=fill_parent/>!--自定義
View-->
/LinearLayout>
編寫(xiě)完布局文件main。xml后,還需要開(kāi)發(fā)字符串資源文件strings。xml。打開(kāi)res/values下的strings。xml文件,編寫(xiě)如下的代碼: ?xmlversion=1。0encoding=utf-8?>!--編碼方式--> 水平儀 在該文件中只是對字符串a(chǎn)pp_name進(jìn)行了定義,在開(kāi)發(fā)Android應用程序時(shí),將字符串資源統一定義到一個(gè)xml文件中是一個(gè)很好的編程習慣。 編寫(xiě)完上述的xml資源文件后,為了調試還需要為此應用程序添加網(wǎng)絡(luò )權限,打開(kāi)項目根目錄下的AndroidManifest。xml文件,在標簽之前加入下列代碼: 上述代碼的功能為此應用程序添加了訪(fǎng)問(wèn)網(wǎng)絡(luò )的權限。 7Activity類(lèi)的開(kāi)發(fā) 完成了自定義View以及XML文件的開(kāi)發(fā)后,就可以對用戶(hù)界面對應的Activity類(lèi)進(jìn)行開(kāi)發(fā),首先開(kāi)發(fā)該類(lèi)的代碼框架,其代碼如下: packagewyf。ytl;//聲明所在包 importandroid。app。Activity;//引入相關(guān)類(lèi) importandroid。hardware。SensorListener; importandroid。hardware。SensorManager; importandroid。os。Bundle; publicclassSPYActivityextendsActivity{//繼承ActivityMainViewmv;//主View intk=45;//靈敏度 //SensorManagermySensorManager; //真機 SensorManagerSimulatormySensorManager;//測試時(shí)@Override publicvoidonCreate(BundlesavedInstanceState){super。onCreate(savedInstanceState); setContentView(R。layout。main);//設置當前用戶(hù)界面 mv=(MainView)findViewById(R。id。mainView); mySensorManager=SensorManagerSimulator。getSystemService(this,SENSOR_SERVICE);//測試時(shí) mySensorManager。connectSimulator();//測試時(shí) //mySensorManager=(SensorManager) //getSystemService(SENSOR_SERVICE);//真機 } privatefinalSensorListenermSensorLisener=newSensorListener(){//傳感器監聽(tīng) //器類(lèi) …//該處省略了部分代碼,將在后面進(jìn)行介紹 }; @Override protectedvoidonResume(){//添加監聽(tīng) mySensorManager。registerListener(mSensorLisener,SensorManager。SENSOR_ORIENTATION); super。onResume(); } @Override protectedvoidonPause(){//取消監聽(tīng) mySensorManager。unregisterListener(mSensorLisener); super。onPause(); } } 上述代碼中除了重寫(xiě)了onCreate方法外,還重寫(xiě)了onRe-sume以及onPause方法為mySensorManager添加或刪除監聽(tīng),并且定義了傳感器監聽(tīng)器類(lèi)mSensorLisener。 在完成了Activity類(lèi)代碼框架的開(kāi)發(fā)后就可以對其中傳感器的監聽(tīng)類(lèi)進(jìn)行開(kāi)發(fā),首先給出監聽(tīng)器類(lèi)的代碼框架: privatefinalSensorListenermSensorLisener= newSensorListener(){//傳感器監聽(tīng)器類(lèi) publicvoidonSensorChanged(intsensor,float[]values){…//該處省略了部分代碼,將在后面進(jìn)行介紹 } @Override publicvoidonAccuracyChanged(intsensor,intaccuracy){} publicbooleanisContain(intx,inty){//判斷點(diǎn)是否在圓內 inttempx=(int)(x+mv。zhongBitmap2。getWidth()/2。0);
評論