android磁场传感器页面布局在哪,如何在Android平台下开发传感器应用实现水平仪的功能及界面的设计...

图3 图片资源

(6) 为应用程序引入调试时使用的Sensorsimulator 支持jar 包, 该jar 包位于Sensorsimulator 安装目录中的bin 目录下:

5、自定义View 的开发

本案例需要自定义一个View 来绘制水平仪的用户界面,首先需要在项目文件夹的src/wyf/ytl 目录下创建一个名为Main-View 的java 类, 并使其继承自View 类, 其代码框架如下:

package wyf.ytl; //声明所在包

import android.content.Context;//引入Context 类

import android.graphics.Bitmap; //引入Bitmap 类

import android.graphics.BitmapFactory; //引入相关类

import android.graphics.Canvas; //引入Canvas 类

import android.graphics.Color; //引入Color 类

import android.graphics.Paint; //引入Paint 类

import android.graphics.RectF; //引入RectF 类

import android.graphics.Paint.Style; //引入Style 类

import android.util.AttributeSet; //引入AttributeSet 类

import android.view.View; //引入View 类

public class MainView extends View{

Paint paint = new Paint(); //画笔

//图片资源的声明

Bitmap shangBitmap1; //上面的大矩形图

Bitmap shangBitmap2; //上面的气泡

Bitmap zuoBitmap1; //左面的大矩形图

Bitmap zuoBitmap2; //左面图的气泡

Bitmap zhongBitmap1; //中间的大圆图

Bitmap zhongBitmap2; //中间的小气泡

Bitmap xiaBitmap1; //右下的矩形图

Bitmap xiaBitmap2; //右下的气泡

//背景矩形的位置声明

int shang1_X = 60; //上面的大矩形图

int shang1_Y = 12;

int zuo1_X = 12; //左面的大矩形图

int zuo1_Y = 60;

int zhong1_X = 65; //中间的大圆图

int zhong1_Y = 65;

int xia1_X = 145; //右下的矩形图

int xia1_Y = 145;//水泡的位置声明

int shang2_X; //上面的气泡XY 坐标

int shang2_Y;

int zuo2_X; //左面图的气泡XY 坐标

int zuo2_Y;

int zhong2_X; //中间的小气泡XY 坐标

int zhong2_Y;

int xia2_X; //右下的气泡XY 坐标

int xia2_Y;

public MainView(Context context, AttributeSet attrs){

super(context, attrs);

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

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

}

private void initBitmap(){ //初始化图片的方法

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

}

private void initLocation(){ //初始化气泡位置的方法

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

}

@Override

protected void onDraw(Canvas canvas){//重写的绘制方法

super.onDraw(canvas);

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

}

}

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

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

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

private void initBitmap(){ //初始化图片资源的方法

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 进行开发了, 其代码如下:

private void initLocation(){ //初始化气泡位置的方法

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

protected void onDraw(Canvas canvas){//界面绘制方法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);

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

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);

//中间圆圈中的刻度(小圆)

RectF oval = new RectF(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 代码:

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--》

编写完布局文件main.xml 后, 还需要开发字符串资源文件strings.xml.打开res/values 下的strings.xml 文件, 编写如下的代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值