Как использовать значения акселерометра для перемещения изображения в Android - PullRequest
2 голосов
/ 08 июня 2011

Привет всем, я хочу переместить изображение, используя значения акселерометра, но я не могу это сделать.Может кто-нибудь, пожалуйста, помогите мне сделать это, я уже просмотрел пример кода на сайте разработчиков Android, но не смог правильно понять.

1 Ответ

5 голосов
/ 08 июня 2011

Чтобы переместить изображение, посмотрите, как это делается в этом примере . По сути, ключ заключается в том, чтобы получить какую-то матрицу и манипулировать ею на основе некоторого ввода, в случае этого примера - касания / перетаскивания пользователя. Приведенный ниже код не работает идеально, но он показывает ключевые команды и классы, необходимые для выполнения перетаскивания. Для получения дополнительной информации см. Связанную статью.

Matrix matrix = new Matrix();
savedMatrix.set(matrix);
matrix.postTranslate(event.getX() - start.x)
ImageView view = (Some image view here)
view.setImageMatrix(matrix);

Следующая часть заключается в том, чтобы каким-то образом использовать акселерометр для получения входных данных. Я оставлю это вам, как наилучшим образом соединить их вместе. Мой источник этой информации эта статья . Есть несколько основных шагов.

Первым шагом является регистрация слушателя, и это делается с помощью этого кода.

SensorManager  sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);

Следующим шагом является регистрация прослушивателя датчика. Последний бит должен показать, как выглядит датчик слушателя. Обратите внимание, что имеется 3 выхода акселерометра, по одному для каждой координаты x, y и z.

@Override
protected void onResume() {
    super.onResume();
    sensorManager.registerListener(accelerationListener, sensor,
            SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onStop() {
    sensorManager.unregisterListener(accelerationListener);
    super.onStop();
}

private SensorEventListener accelerationListener = new SensorEventListener() {
    @Override
    public void onAccuracyChanged(Sensor sensor, int acc) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        x = event.values[0];
        y = event.values[1];
        z = event.values[2];
    }

};

Следующим шагом будет выяснение значений x, y и z для желаемого приложения. Я предлагаю вам взять и записать каждый из них, используя оператор Log.v(TAG,...). Поиграйте с наклоном и определите, что именно вы хотите сделать. Настраивайте его до тех пор, пока он не достигнет нужного уровня чувствительности, увидев, как далеко он находится от прямого вверх и вниз, и определенную скорость изменения координат x и y изображения. Удачи!

...