方位传感器(重力小球)
准备一张名为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>
方位传感器(重力小球)相关推荐
- Android实现重力小球
很简单的实现,作为软件专业大二在校生,接触安卓还没两个月,没事写着玩练练手,请大神们莫要嘲讽 重力小球主要参考了http://www.xuanyusong.com/archives/337这篇文章,我 ...
- 【自定义view】android重力小球
android实现重力小球 自定义小球view package com.project.demo.view;import static android.content.Context.SENSOR_S ...
- 传感器(7)加速传感器,重力传感器,邻近传感器,光线传感器 综合示例
综合示例,包含: //加速传感器 //重力传感器 //邻近传感器 //光线传感器 1 import android.app.Activity; 2 import android.hardware.Se ...
- canvas重力小球 html+css+js
先看效果(完整代码在底部): 因为录屏软件的原因,动画看着有点迟钝,其实是动画很顺畅的~ https://space.bilibili.com/176586698 实现过程(可一步一步实现): 1.定 ...
- android sensor之重力小球
安卓重力小球demo 要过年了,最近在公司也没事.于是就在研究android的一些SDK.看到sensor时,突然想到大学里面刚出现android的时候,还没有钱买android手机,那时候想要是有个 ...
- #网页动画# 重力小球
网页重力小球动画 网页canvas重力小球动画 动画效果链接 <!DOCTYPE html> <html lang="zh"> <head>&l ...
- android 方向sensor,Android开发者指南-方位传感器-Position Sensor[原创译文]
Android 平台提供了两种传感器来检测设备的方位:地磁传感器和方向传感器. Android 平台还提供了一种传感器,用于检测屏幕表面与其它物体的邻近程度,即被称为距离传感器. 地磁传感器和距离传感 ...
- 考验平衡性 安卓出色物理游戏反重力小球
<反重力小球>是一款非常出色的安卓物理游戏,大家肯定记得早前很受关注的那款游戏<机械物理>,这次推荐的<反重力小球>,绝对比它更有意思,益智达人的最爱是什么?当然是 ...
- android系统重力感应传感器 方向控制与方向切换,android sensor orientation 方向传感器 重力感应...
首先,获取方向传感器(参照http://developer.android.com/reference/android/hardware/SensorManager.html): publicclas ...
最新文章
- Q新闻丨MongoDB更换开源协议;Redis 5.0、Angular 7.0发布
- Flask 自定义过滤器多个参数传入
- android布局之LinearLayout 转
- LCD无字库--单片机字库存储
- MongoDB学习笔记Day3
- java 概率 算法_使用概率算法优化快速排序(JAVA)
- PMP每日三题(2022年3月8日)
- css响应式网格布局生成器_如何使用网格布局模块使用纯CSS创建响应表
- 两岸三地在线编程学习网站大全
- Video视频背景设计企业模板
- )类 新建javafx程序时_关于JavaFX杂谈
- 日期多选插件Kalendae.js
- win11鼠标指针如何设置 Windows11鼠标指针的设置方法
- nnie svp算法代码解读
- C语言:输入日期,计算该日期是该年的第几天。
- 计算机监控系统在地铁中的应用有哪些,地铁综合监控
- 微信小游戏开发新手教程14-整合到一起,做出你的小游戏
- 电脑计算机c盘打不开怎么办,Win7系统电脑C盘打不开怎么办_Win7系统电脑C盘打不开的解决方法 - 系统家园...
- Openstack 组件Placement部署思路过程
- 解决Chrome自带翻译功能无法使用问题