android之加速感應器
来源:互联网 发布:淘宝网会员注册流程 编辑:程序博客网 时间:2024/05/21 21:02
使用加速感應器的三個步驟,我們需要實現接口SensorEventListener:
1.獲得感應器管理對象:sensorManager=(SensorManager) ball.getSystemService(context.SENSOR_SERVICE);
ball表示一個Activity類。
2.獲得加速感應器對象:sensor=sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
3.注冊監聽器:sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_GAME);
當感應到加速度變化時,會自動調用以下方法:onSensorChanged
加速感應器應用之重力球:
Activity類:
public class GravityBallActivity extends Activity{
private MyView myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gravity_ball);
myView=new MyView(getApplicationContext(),this);
myView.setFocusable(true);
setContentView(myView);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
}
View類,繪制小球:
public class MyView extends View implements SensorEventListener {
private Canvas canvas;
private Paint paint;
private SensorManager sensorManager;
private Sensor sensor;
//初始加速度值
private float AccelX=0;
private float AccelY=0;
private float AccelZ=0;
//變化後的加速度
private float last_AccelX=0;
private float last_AccelY=0;
private float last_AccelZ=0;
private long lastUpdate=0;
//小球的位置
private float ballX=0,ballY=0;
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//該函數作用是使整個客戶區域無效,客戶區無效意味著需要重新繪制
invalidate();
canvas.drawCircle(ballX, ballY, 50, paint);
}
//屏幕大小
int screenWidth=0,screenHeight=0;
public MyView(Context context, GravityBallActivity ball) {
super(context);
canvas=new Canvas();
paint=new Paint();
paint.setColor(Color.RED);
sensorManager=(SensorManager) ball.getSystemService(context.SENSOR_SERVICE);
sensor=sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_GAME);
// TODO Auto-generated constructor stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
//得到加速度值
AccelX=event.values[SensorManager.DATA_X];
AccelY=event.values[SensorManager.DATA_Y];
AccelZ=event.values[SensorManager.DATA_Z];
//得到當前屏幕的寬高
screenWidth=this.getWidth();
screenHeight=this.getHeight();
//小球運動的中心坐標,因為在模擬重力小球時隻是感應方向的變化,
//我們取小球位置的變化在數值上等於加速度的變化
ballX-=AccelX;
ballY-=AccelY;
if(ballX<0)
{
ballX=0;
}else if(ballX>screenWidth)
{
ballX=screenWidth;
}
if(ballY<0)
{
ballY=0;
}else if(ballY>screenHeight)
{
ballY=screenHeight;
}
onDraw(canvas);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
}
- android之加速感應器
- android:UI加速之--背景颜色
- Android性能优化之启动加速
- Android性能优化之启动加速
- Android游戏编程之加速计和罗盘测试
- Android 传感器之《加速传感器》——摇一摇功能
- 简单的android studio之gradle编译加速优化
- Android性能优化(一)之启动加速35%
- AS构建加速工具之jrebel for android的使用
- Android性能优化(一)之启动加速35%
- PHP程序加速探索之加速工具软件
- 加速Android UI(一):加速ListView
- Android加速球、360加速球
- 程序加速之查表法
- iphone之加速计
- ios之加速计
- iphone之加速计
- ADC之应用加速
- SmartFoxServer 2x的python客户端
- 异常的统一处理
- [Android Lint] xxx is not translated in xxx 的解决方法
- 文档导读
- 代码片段你整理
- android之加速感應器
- 后缀表达式 NYOJ 257
- MATLAB 查看程序执行内存最大使用值
- epoll处理并发
- 如何查询文档
- iOS开源框架集合
- 代码设计与敏捷开发
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- java并发编程笔记