基于Android嵌入式平台传感器应用开发水平仪
//绘制左面方框中的刻度
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);//绘制基准线(圆)
}
在该方法中,根据相应图片的X、Y坐标将图片绘制到屏幕中,在图片的绘制过程中,同样动态根据相应图片的宽和高计算需要绘制到的位置坐标,以提高程序的可维护性与灵活性。
6相关XML文件的编写
完成了用于显示水平仪界面的自定义View的Java代码开发之后,就应该对布局XML资源文件进行编写,以将之前开发的自定义View添加到用户界面中。打开项目中res/layout目录下的main。xml,在其中编写如下的xml代码:
?xmlversion=1。0encoding=utf-8?>!--编码格式-->
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent>!--线性布局-->
android:id=@+id/mainView
android:layout_width=fill_parent
android:layout_height=fill_parent/>!--自定义
View-->
/LinearLayout>
编写完布局文件main。xml后,还需要开发字符串资源文件strings。xml。打开res/values下的strings。xml文件,编写如下的代码:
?xmlversion=1。0encoding=utf-8?>!--编码方式-->
水平仪
在该文件中只是对字符串app_name进行了定义,在开发Android应用程序时,将字符串资源统一定义到一个xml文件中是一个很好的编程习惯。
编写完上述的xml资源文件后,为了调试还需要为此应用程序添加网络权限,打开项目根目录下的AndroidManifest。xml文件,在标签之前加入下列代码:
上述代码的功能为此应用程序添加了访问网络的权限。
7Activity类的开发
完成了自定义View以及XML文件的开发后,就可以对用户界面对应的Activity类进行开发,首先开发该类的代码框架,其代码如下:
packagewyf。ytl;//声明所在包
importandroid。app。Activity;//引入相关类
importandroid。hardware。SensorListener;
importandroid。hardware。SensorManager;
importandroid。os。Bundle;
publicclassSPYActivityextendsActivity{//继承ActivityMainViewmv;//主View
intk=45;//灵敏度
//SensorManagermySensorManager;
//真机
SensorManagerSimulatormySensorManager;//测试时@Override
publicvoidonCreate(BundlesavedInstanceState){super。onCreate(savedInstanceState);
setContentView(R。layout。main);//设置当前用户界面
mv=(MainView)findViewById(R。id。mainView);
mySensorManager=SensorManagerSimulator。getSystemService(this,SENSOR_SERVICE);//测试时
mySensorManager。connectSimulator();//测试时
//mySensorManager=(SensorManager)
//getSystemService(SENSOR_SERVICE);//真机
}
privatefinalSensorListenermSensorLisener=newSensorListener(){//传感器监听
//器类
…//该处省略了部分代码,将在后面进行介绍
};
@Override
protectedvoidonResume(){//添加监听
mySensorManager。registerListener(mSensorLisener,SensorManager。SENSOR_ORIENTATION);
super。onResume();
}
@Override
protectedvoidonPause(){//取消监听
mySensorManager。unregisterListener(mSensorLisener);
super。onPause();
}
}
上述代码中除了重写了onCreate方法外,还重写了onRe-sume以及onPause方法为mySensorManager添加或删除监听,并且定义了传感器监听器类mSensorLisener。
在完成了Activity类代码框架的开发后就可以对其中传感器的监听类进行开发,首先给出监听器类的代码框架:
privatefinalSensorListenermSensorLisener=
newSensorListener(){//传感器监听器类
publicvoidonSensorChanged(intsensor,float[]values){…//该处省略了部分代码,将在后面进行介绍
}
@Override
publicvoidonAccuracyChanged(intsensor,intaccuracy){}
publicbooleanisContain(intx,inty){//判断点是否在圆内
inttempx=(int)(x+mv。zhongBitmap2。getWidth()/2。0);
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论