重力感应

视图部分:Myview

1、继承view

2、定义水平仪仪表盘图片、气泡图片、气泡坐标

3、构造函数中加载图片

back = BitmapFactory.decodeResource(getResources()

           ,R.drawable.back);

4、OnDraw函数中绘制图片

protected void onDraw(Canvas canvas)

    {

       super.onDraw(canvas);

       // 绘制水平仪表盘图片

       canvas.drawBitmap(back, 0, 0, null);

       // 根据气泡座标绘制气泡

       canvas.drawBitmap(bubble, bubbleX, bubbleY, null);

    }

 

activity部分

1、定义视图类、最大倾斜角、真机传感器

    MyView show;

    // 定义水平仪能处理的最大倾斜角,超过该角度,气泡将直接在位于边界。

    int MAX_ANGLE = 30;

    // 定义真机的Sensor管理器

    SensorManagermSensorManager;

 

2、oncreate函数中获取真机传感器服务

// 获取真机的传感器管理服务  mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);

 

3、onresume函数中注册监听器

public void onResume()

    {

       super.onResume();

       // 为系统的方向传感器注册监听器

       mSensorManager.registerListener(this,

           mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),

           SensorManager.SENSOR_DELAY_GAME);

    }

4、onpause、onstop中取消监听器

protected void onPause()

    {

       // 取消注册

       mSensorManager.unregisterListener(this);

       super.onPause();  }

5、传感器方向判断

public voidonSensorChanged(SensorEvent event)

{

         floatvalues=event.values;

         intsensorType=event.sensor.getType();

switch(sensorType)

{

case:

·

·

·

·

show.postInvalidate();

              break;

}

 

6、计算气泡坐标是否在仪表盘内

// 计算xy点的气泡是否处于水平仪的仪表盘内

    private boolean isContain(int x, int y)

    {

       // 计算气泡的圆心座标XY

       int bubbleCx = x + show.bubble.getWidth() / 2;

       int bubbleCy = y + show.bubble.getWidth() / 2;

       // 计算水平仪仪表盘的圆心座标XY

       int backCx = show.back.getWidth() / 2;

       int backCy = show.back.getWidth() / 2;

       // 计算气泡的圆心与水平仪仪表盘的圆心之间的距离。

       double distance = Math.sqrt((bubbleCx - backCx) *(bubbleCx - backCx)

           + (bubbleCy - backCy) * (bubbleCy - backCy));

       // 若两个圆心的距离小于它们的半径差,即可认为处于该点的气泡依然位于仪表盘内

       if (distance < (show.back.getWidth() - show.bubble.getWidth()) / 2)

       {

           return true;

       }

       else

       {

           return false;

       }

    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值