基于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);
评论