基于Android嵌入式平台传感器应用开发水平仪

时间:2012-04-16来源:网络

BitmapxiaBitmap2;//右下的气泡

//背景矩形的位置声明

intshang1_X=60;//上面的大矩形图

intshang1_Y=12;

intzuo1_X=12;//左面的大矩形图

intzuo1_Y=60;

intzhong1_X=65;//中间的大圆图

intzhong1_Y=65;

intxia1_X=145;//右下的矩形图

intxia1_Y=145;//水泡的位置声明

intshang2_X;//上面的气泡XY坐标

intshang2_Y;

intzuo2_X;//左面图的气泡XY坐标

intzuo2_Y;

intzhong2_X;//中间的小气泡XY坐标

intzhong2_Y;

intxia2_X;//右下的气泡XY坐标

intxia2_Y;

publicMainView(Contextcontext,AttributeSetattrs){

super(context,attrs);

initBitmap();//初始化图片资源

initLocation();//初始化气泡的位置

}

privatevoidinitBitmap(){//初始化图片的方法

…//该处省略了部分代码,将在后面进行介绍

}

privatevoidinitLocation(){//初始化气泡位置的方法

…//该处省略了部分代码,将在后面进行介绍

}

@Override

protectedvoidonDraw(Canvascanvas){//重写的绘制方法

super。onDraw(canvas);

…//该处省略了部分代码,将在后面进行介绍

}

}

上述代码中的initBitmap以及initLocation方法是对界面进行初始化方法,而onDraw方法会根据需要绘制整个界面。

MainView类构造器中调用了两个单独的方法对整个界面进行了初始化,这是一种非常好的编程习惯。因为把不同功能的代码各自编写成独立的方法可以使主逻辑清晰,且各个方法中的代码都不是很长,会大大提高代码的可读性以及可维护性。

完成了代码框架的开发后就可以对其中各个方法进行开发了,首先开发的是图片资源的初始化方法,其代码如下:

privatevoidinitBitmap(){//初始化图片资源的方法

shangBitmap1=BitmapFactory。decodeResource(getResources(),R。drawable。shang1);

shangBitmap2=BitmapFactory。decodeResource(getResources(),R。drawable。shang2);

zuoBitmap1=BitmapFactory。decodeResource(getResources(),R。drawable。zuo1);

zuoBitmap2=BitmapFactory。decodeResource(getResources(),R。drawable。zuo2);

zhongBitmap1=BitmapFactory。decodeResource(getResources(),R。drawable。zhong1);

zhongBitmap2=BitmapFactory。decodeResource(getResources(),R。drawable。zhong2);

xiaBitmap1=BitmapFactory。decodeResource(getResources(),R。drawable。xia1);

xiaBitmap2=BitmapFactory。decodeResource(getResources(),R。drawable。xia2);

}

上述代码为initBitmap方法的全部代码,其作用是对程序中所有的图片资源进行初始化,在开发该方法之前,应该确保所有的图片资源已经存放到了指定的目录下。

完成了图片资源初始化方法的开发后,便可对气泡位置初始化方法initLocation进行开发了,其代码如下:

privatevoidinitLocation(){//初始化气泡位置的方法

shang2_X=shang1_X+shangBitmap1。getWidth()/2-shangBitmap2。getWidth()/2;

shang2_Y=shang1_Y+shangBitmap1。getHeight()/2-shangBitmap2。getHeight()/2;

zuo2_X=zuo1_X+zuoBitmap1。getWidth()/2-zuoBitmap2。getWidth()/2;

zuo2_Y=zuo1_Y+zuoBitmap1。getHeight()/2-zuoBitmap2。getHeight()/2;

zhong2_X=zhong1_X+zhongBitmap1。getWidth()/2-zhongBitmap2。getWidth()/2;

zhong2_Y=zhong1_Y+zhongBitmap1。getHeight()/2-zhongBitmap2。getHeight()/2;

xia2_X=xia1_X+xiaBitmap1。getWidth()/2-xiaBitmap2。getWidth()/2;

xia2_Y=xia1_Y+xiaBitmap1。getHeight()/2-xiaBitmap2。getHeight()/2;

}

在该方法中通过相应图片的宽度和高度动态计算气泡的初始坐标,采用此方法动态计算气泡坐标的好处是当日后更改图片资源后,不需要重写修改源代码即可正常运行,大大提高了程序的可维护性。

在完成了各个初始化方法的开发后就可以对绘制方法onDraw进行开发,该方法主要负责界面的绘制工作,其代码如下:

@Override

protectedvoidonDraw(Canvascanvas){//界面绘制方法super。onDraw(canvas);

canvas。drawColor(Color。WHITE);//设置背景色为白色

paint。setColor(Color。BLUE);//设置画笔颜色

paint。setStyle(Style。STROKE);//设置画笔为不填充

canvas。drawRect(5,5,315,315,paint);//绘制外边框矩形

//画背景矩形

canvas。drawBitmap(shangBitmap1,shang1_X,shang1_Y,paint);//上

canvas。drawBitmap(zuoBitmap1,zuo1_X,zuo1_Y,paint);//左

canvas。drawBitmap(zhongBitmap1,zhong1_X,zhong1_Y,paint);//中

canvas。drawBitmap(xiaBitmap1,xia1_X,xia1_Y,paint);//下

//开始绘制气泡

canvas。drawBitmap(shangBitmap2,shang2_X,shang2_Y,paint);//上

canvas。drawBitmap(zuoBitmap2,zuo2_X,zuo2_Y,paint);//左

canvas。drawBitmap(zhongBitmap2,zhong2_X,zhong2_Y,paint);//中

canvas。drawBitmap(xiaBitmap2,xia2_X,xia2_Y,paint);//下

paint。setColor(Color。GRAY);//设置画笔颜色用来绘制刻度

//绘制上面方框中的刻度

canvas。drawLine(shang1_X+shangBitmap1。getWidth()/2-7,shang1_Y,shang1_X+shangBitmap1。getWidth()/2-7,shang1_Y+shangBitmap1。getHeight()-2,paint);

canvas。drawLine(shang1_X+shangBitmap1。getWidth()/2+7,shang1_Y,shang1_X+shangBitmap1。getWidth()/2+7,shang1_Y+shangBitmap1。getHeight()-2,paint);

1 2 3 4 5

关键词: 应用开发 水平 传感器 平台 Android 嵌入式 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版