基于Android嵌入式平台传感器应用开发水平仪
ew)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);
inttempy=(int)(y+mv。zhongBitmap2。getWidth()/2。0);
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
应用开发 水平 传感器 平台 Android 嵌入式 基于 相关文章:
- iOS平台应用开发的敏捷设计流程(09-12)
- SPE61A单片机的非接触式高压验电器的应用开发(06-23)
- 采用PDIUSBD12芯片的USB应用开发(05-02)
- 基于Android的多媒体应用开发与研究(03-05)
- 嵌入式PLC芯片组的多路模拟量应用开发(12-12)
- 基于PDIUSBD12芯片的USB应用开发(08-12)