2

我很难正确地找到这一点。我想要的是,当我摇晃时,我的颜色会变成其他东西或文字会变成其他东西。不一定是随机的。找不到任何有用的东西,但不包括无用的东西。

4

2 回答 2

2

甚至 20 秒的谷歌搜索都没有为您提供一个可能非常完美的复制粘贴解决方案,并且您可以通过简单的回调在其中执行任何您想要在 Activity 中执行的操作......

http://android.hlidskialf.com/blog/code/android-shake-detection-listener

于 2013-03-27T12:00:31.003 回答
0

使用下面的类,并在创建它的新实例时调用您创建的实例上的 setCallBack 方法以接收回调,当您通过传感器管理器注册侦听器时传递该实例。

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;



public class ShakeListener implements SensorEventListener {

    private ShakeCallback mShakeCallback;

    private int totalMovement;
    private long timeMilies;
    private float lastX, lastY, lastZ = -1.0f;
    private int shakeIntervalMilies = 2000;

    ShakeListener() {
    }

    public static ShakeListener newInstance() {
        return new ShakeListener();
    }


    public ShakeListener setCallBack(ShakeCallback shakeCallback) {
        this.mShakeCallback = shakeCallback;

        return this;
    }


    public ShakeListener setShakingInterval(int intervalMilies) {
        this.shakeIntervalMilies = intervalMilies;

        return this;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (mShakeCallback != null) {
            totalMovement = (int) ((event.values[0] + event.values[1] + event.values[2]) - (lastX
                    + lastY + lastZ));
            if (totalMovement > 20
                    && (System.currentTimeMillis() - timeMilies >= shakeIntervalMilies)) {
                mShakeCallback.onShake();
                timeMilies = System.currentTimeMillis();

            }
            lastX = event.values[0];
            lastY = event.values[1];
            lastZ = event.values[2];
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
    public static interface ShakeCallback {
        public void onShake();

    }

}
于 2013-03-27T13:46:14.880 回答