0
Ping-pongラケットのようにデバイスを上下に動かすと、スクリーンにはダイスが投げられるアンドロイドゲームのダイスゲームがあります。デバイスの上下(ピンポン)動作をどのように検出できますか?
私はこのデバイスの動きを検出したいと思います。どうやってやるの?
おかげで、活動に
Ping-pongラケットのようにデバイスを上下に動かすと、スクリーンにはダイスが投げられるアンドロイドゲームのダイスゲームがあります。デバイスの上下(ピンポン)動作をどのように検出できますか?
私はこのデバイスの動きを検出したいと思います。どうやってやるの?
おかげで、活動に
package org.mabna.order.utils;
public interface OnDeviceShakeListener {
public abstract void onDeviceShaked();
}
import java.util.ArrayList;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
public class SensorListener implements SensorEventListener {
float[] xVals = new float[] { 0, 0, 0 };
float[] yVals = new float[] { 0, 0, 0 };
long prevTime = 0;
final float angle = 10;
final long time = 100 * 1000 * 1000; // in nanosecond
public SensorListener()
{
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
if (event.timestamp - prevTime > time)
{
prevTime = event.timestamp;
xVals[0] = xVals[1];
xVals[1] = xVals[2];
xVals[2] = event.values[1];
yVals[0] = yVals[1];
yVals[1] = yVals[2];
yVals[2] = event.values[2];
if (degreeChanged(xVals) ||
degreeChanged(yVals))
{
OnDeviceShaked();
}
}
}
}
}
private boolean degreeChanged(float[] V) {
float v0 = Math.abs(V[0]);
float v1 = Math.abs(V[1]);
float v2 = Math.abs(V[2]);
boolean hasAngle = ((v1 - v0) > angle && (v1 - v2) > angle);
return hasAngle;
}
// DeviceShakeListener ----------------------------------------------------
ArrayList<OnDeviceShakeListener> arrOnDeviceShakeListener =
new ArrayList<OnDeviceShakeListener>();
/**
* Listens if device is shaken like a Ping-pong racket.
*
* @param listener
*/
public void setOnDeviceShakeListener(
OnDeviceShakeListener listener) {
arrOnDeviceShakeListener.add(listener);
}
public void clearOnDeviceShakeListener(
OnDeviceShakeListener listener) {
arrOnDeviceShakeListener.remove(listener);
}
// This function is called after the new point received
private void OnDeviceShaked() {
// Check if the Listener was set, otherwise we'll get an Exception when
// we try to call it
if (arrOnDeviceShakeListener != null) {
// Only trigger the event, when we have any listener
for (int i = arrOnDeviceShakeListener.size() - 1; i >= 0; i--) {
arrOnDeviceShakeListener.get(i).onDeviceShaked();
}
}
}
}
:の
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorHandler = new SensorListener();
sensorHandler.setOnDeviceShakeListener(new OnDeviceShakeListener() {
@Override
public void onDeviceShaked() {
//....
}
});
デバイスが「垂直」に揺れていることをどのように知ることができますか?私のデバイスがダウンしているときを検出する方法を意味しますか? –
が重複する可能性(HTTP [残りの部分から縦方向に携帯電話の動きを計算する方法?] ://stackoverflow.com/questions/6291110/how-to-calculate-phones-movement-in-the-vertical-d方向転換から) – fyr