准备一张名为ball的小球图片。

在main.xml中:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<com.li.sensor.BallView

android:layout_width="fill_parent"

android:layout_height="wrap_content"  />

</LinearLayout>

在BallView.java中:

package com.li.sensor;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Point;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.util.AttributeSet;

import android.view.View;

public class BallView extends View implements SensorEventListener {

private Bitmap ball = null;

private float[] allValue;

private Point point = new Point();

private int xSpeed = 0;

private int ySpeed = 0;

public BallView(Context context, AttributeSet attrs) {

super(context, attrs);

super.setBackgroundColor(Color.GREEN); // 底色为绿色

this.ball = BitmapFactory.decodeResource(super.getResources(),

R.drawable.ball);

SensorManager manager = (SensorManager) context

.getSystemService(Context.SENSOR_SERVICE); // 现在只是找到了一个传感器,但是没有定义类型

manager.registerListener(this,

manager.getDefaultSensor(Sensor.TYPE_ORIENTATION),

SensorManager.SENSOR_DELAY_GAME); // 创建了一个适合于游戏操作的方位传感器

}

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

public void onSensorChanged(SensorEvent event) { // 传感器方位改变

if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { // 现在是方位传感器

float value[] = event.values; // 取得所有的偏离数据

BallView.this.allValue = value; // 取得三个轴的值

super.postInvalidate(); // 主线程的现实需要重绘

}

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

Paint p = new Paint(); // 根据传感器的数值来改变球的速度

if (this.allValue != null) { // 已经取得了数据

this.xSpeed = (int) -this.allValue[2]; // 计算X轴速度

this.ySpeed = (int) -this.allValue[1];

}

this.point.x += this.xSpeed;

this.point.y += this.ySpeed;

if (this.point.x < 0) {

this.point.x = 0;

}

if (this.point.y < 0) {

this.point.y = 0;

}

if (point.x > super.getWidth() - this.ball.getWidth()) { // X轴已经显示过了

this.point.x = super.getWidth() - this.ball.getWidth();

}

if (point.y > super.getHeight() - this.ball.getHeight()) {

this.point.y = super.getHeight() - this.ball.getWidth(); // 设置Y 轴的边界

}

canvas.drawBitmap(this.ball, this.point.x, this.point.y, p);

}

}

在MySensorDemo.java中:

package com.li.sensor;

import android.app.Activity;

import android.os.Bundle;

public class MySensorDemo extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

修改AndroidManifest.xml,设置为竖屏。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.li.sensor"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="15" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MySensorDemo"

android:label="@string/title_activity_my_sensor_demo"

android:screenOrientation="portrait">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

方位传感器(重力小球)相关推荐

  1. Android实现重力小球

    很简单的实现,作为软件专业大二在校生,接触安卓还没两个月,没事写着玩练练手,请大神们莫要嘲讽 重力小球主要参考了http://www.xuanyusong.com/archives/337这篇文章,我 ...

  2. 【自定义view】android重力小球

    android实现重力小球 自定义小球view package com.project.demo.view;import static android.content.Context.SENSOR_S ...

  3. 传感器(7)加速传感器,重力传感器,邻近传感器,光线传感器 综合示例

    综合示例,包含: //加速传感器 //重力传感器 //邻近传感器 //光线传感器 1 import android.app.Activity; 2 import android.hardware.Se ...

  4. canvas重力小球 html+css+js

    先看效果(完整代码在底部): 因为录屏软件的原因,动画看着有点迟钝,其实是动画很顺畅的~ https://space.bilibili.com/176586698 实现过程(可一步一步实现): 1.定 ...

  5. android sensor之重力小球

    安卓重力小球demo 要过年了,最近在公司也没事.于是就在研究android的一些SDK.看到sensor时,突然想到大学里面刚出现android的时候,还没有钱买android手机,那时候想要是有个 ...

  6. #网页动画# 重力小球

    网页重力小球动画 网页canvas重力小球动画 动画效果链接 <!DOCTYPE html> <html lang="zh"> <head>&l ...

  7. android 方向sensor,Android开发者指南-方位传感器-Position Sensor[原创译文]

    Android 平台提供了两种传感器来检测设备的方位:地磁传感器和方向传感器. Android 平台还提供了一种传感器,用于检测屏幕表面与其它物体的邻近程度,即被称为距离传感器. 地磁传感器和距离传感 ...

  8. 考验平衡性 安卓出色物理游戏反重力小球

    <反重力小球>是一款非常出色的安卓物理游戏,大家肯定记得早前很受关注的那款游戏<机械物理>,这次推荐的<反重力小球>,绝对比它更有意思,益智达人的最爱是什么?当然是 ...

  9. android系统重力感应传感器 方向控制与方向切换,android sensor orientation 方向传感器 重力感应...

    首先,获取方向传感器(参照http://developer.android.com/reference/android/hardware/SensorManager.html): publicclas ...

最新文章

  1. Q新闻丨MongoDB更换开源协议;Redis 5.0、Angular 7.0发布
  2. Flask 自定义过滤器多个参数传入
  3. android布局之LinearLayout 转
  4. LCD无字库--单片机字库存储
  5. MongoDB学习笔记Day3
  6. java 概率 算法_使用概率算法优化快速排序(JAVA)
  7. PMP每日三题(2022年3月8日)
  8. css响应式网格布局生成器_如何使用网格布局模块使用纯CSS创建响应表
  9. 两岸三地在线编程学习网站大全
  10. Video视频背景设计企业模板
  11. )类 新建javafx程序时_关于JavaFX杂谈
  12. 日期多选插件Kalendae.js
  13. win11鼠标指针如何设置 Windows11鼠标指针的设置方法
  14. nnie svp算法代码解读
  15. C语言:输入日期,计算该日期是该年的第几天。
  16. 计算机监控系统在地铁中的应用有哪些,地铁综合监控
  17. 微信小游戏开发新手教程14-整合到一起,做出你的小游戏
  18. 电脑计算机c盘打不开怎么办,Win7系统电脑C盘打不开怎么办_Win7系统电脑C盘打不开的解决方法 - 系统家园...
  19. Openstack 组件Placement部署思路过程
  20. 解决Chrome自带翻译功能无法使用问题

热门文章

  1. 数据压缩算法综述(摘录)
  2. 响应服务器554,服务器554
  3. c语言汇编6,C语言是如何转换成汇编语言的6个步骤带你解析
  4. 机器人运动学逆解中最常用的三角方程(附代码)
  5. python开发mes系统_MES系统开发手记(一)
  6. Spring开篇介绍-如果没有Spring如何对外暴露一个接口
  7. VSCode中MarkDown图片无法显示
  8. 腾讯天美游戏客户端 一面凉经
  9. 硬件相关优化代码host_kernel_mod的个人理解
  10. zip格式文件伪加密