Android 传感器(Sensor)API教程 (六) 加速度传感器运用实例
来源:互联网 发布:梁宁 闲花照水录 知乎 编辑:程序博客网 时间:2024/05/19 15:44
原帖地址:http://www.androidegg.com/portal.php?mod=view&aid=641
1.4.4 加速度传感器运用实例
在这里,我们对Low-Pass Filter和High-pass filter实例进行说明。在实际的运用中在什么样的场合下如何使用这两个过滤器,通过例程我们进行很好的理解。程序列表1-6,列表1-7是摇晃手机表示图片的应用程序的代码(运行结果如图1-6)。在这个例程中作成ShakeActivity类和管理抽样数据的ValueHolder类。ShakeActivity类和ValueHolder类的关系如图1-7所示。
图1-6 摇动手机并表示图片的例程
列表1-6 摇动手机并表示图片的例程1
package com.mamezou.android.shake;
import java.util.Arrays;
public class ValueHolder { //..................①
private static final float BLANK = -999;
private int size;
private float[] values;
private int position = 0;
public ValueHolder(int size) {
this.size = size;
values = new float[size];
clear();
}
private void clear() {
Arrays.fill(values, BLANK);
}
public boolean add(float value) {
values[position] = value;
if(size -1 == position) {
position = 0;
return true;
}
position ++;
return false;
}
// 取得中间值的方法
public float getMedian() { //..................②
float[] tmp = values.clone();
Arrays.sort(tmp);
int len = tmp.length;
int first = 0;
for (int i = 0; i < len; i++) {
first = i;
if(tmp[i] != BLANK) break;
}
return tmp[(len - first) / 2 + first];
}
}
要点如下所示
①ValueHolder类管理用size指定的抽样数据
②返回保存的抽样数据的中间值。
列表1-6 摇动手机并表示图片的例程2
package com.mamezou.android.shake;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
public class ShakeActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private ValueHolder x;
private ValueHolder y;
private ValueHolder z;
private View layout;
// Android君的画像
private BitmapDrawable andy;
private static final int ELEMENT_COUNT = 30;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
layout = (View) findViewById(R.id.layout);
andy = (BitmapDrawable) getResources().getDrawable(R.drawable.andy);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
x = new ValueHolder(ELEMENT_COUNT);
y = new ValueHolder(ELEMENT_COUNT);
z = new ValueHolder(ELEMENT_COUNT);
}
@Override
protected void onStop() {
sensorManager.unregisterListener(this);
super.onStop();
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent e) {
float sensorValueX = e.values[SensorManager.DATA_X];
float sensorValueY = e.values[SensorManager.DATA_Y];
float sensorValueZ = e.values[SensorManager.DATA_Z];
x.add(sensorValueX);
y.add(sensorValueY);
z.add(sensorValueZ);
float valueX = sensorValueX - x.getMedian();
float valueY = sensorValueX - x.getMedian();
float valueZ = sensorValueX - x.getMedian();
andy.setAlpha(15 * (int)(Math.abs(valueX) + Math.abs(valueY) + Math.abs(valueZ))); //..................①
layout.setBackgroundDrawable(andy);
}
}
要点如下所示
①对3个轴的High-pass filter的值,画像的阿尔法值进行操作。按照这样做,手机强烈摇动的时候Android画像被表示。High-pass filter处理对只是对手机倾斜,画面不被表示。只对手机进行摇动的时候画像才表示。
全部源码下载
Shake.zip
- Android 传感器(Sensor)API教程 (六) 加速度传感器运用实例
- Android 传感器(Sensor)API教程 (四) 加速度传感器
- Android 传感器(Sensor)API教程 (七) 倾斜加速度
- Android 传感器(Sensor)API教程
- Android 传感器(Sensor)API教程
- Android 加速度传感器(G-Sensor)
- Android 加速度传感器(G-Sensor)
- Android 传感器(Sensor)API教程 (五) 瞬间的加速度值取得
- Android 传感器(Sensor)API教程 (二) 传感器事件
- 加速度传感器---Sensor.TYPE_ACCELEROMETER
- 【转】Android 加速度传感器 (G-Sensor)
- 【转】Android 加速度传感器 (G-Sensor)
- Android 加速度传感器 (G-Sensor) 收
- Android传感器 之 加速度传感器(Sensor.TYPE_ACCELEROMETER)
- Android 传感器(Sensor)API教程 (一) 常用方法简介
- Android传感器之加速度传感器
- Android 传感器(Sensor)API教程 (三) 传感器值取得例程及处理流程
- android加速度传感器
- Android 传感器(Sensor)API教程 (五) 瞬间的加速度值取得
- const 和 #define
- 函数指针和指针函数
- C++继承:共有,私有,保护
- Git学习教程(二):配置和初始化
- Android 传感器(Sensor)API教程 (六) 加速度传感器运用实例
- Linux和windows中的换行符差异问题 LINUX的换行符在Windows记事本打开不换行或出现黑点
- inb的困惑
- learning jQuery 学习笔记十七(+jQuery 1.4.1 API)-- 表格操作----三色交替
- Android 传感器(Sensor)API教程 (七) 倾斜加速度
- 写了js过滤重复字符的函数
- 下载编译Android 2.3 源代码 .
- 教师发帖称寒门难再出贵子 教育资源分布不均衡
- C++多线程调试和测试的注意事项