Я хочу, чтобы ImageButton вращался при изменении ориентации устройства. Он должен вращаться на 90, 180, 270 и 360 градусов, а его относительное расположение должно оставаться стабильным, чтобы двигались только кнопки. Как это может быть сделано? Я провел некоторые исследования, но не нашел ничего, что могло бы мне помочь.
Как повернуть кнопки при изменении ориентации без поворота макета?
comment
Вы должны разбить задачу на части: 1 остановить воссоздание Активности по очереди. 2. Ловля вращения. 3. Вращение взгляда.... На каждый из этих кусочков уже есть ответ, здесь на SO... Трудно поверить, что вы ничего не нашли...
- person Selvin   schedule 07.10.2015
comment
Я не знал, как разделить мой вопрос на эти части. Я новичок в Android и Java. У меня все еще есть проблема, потому что моя ориентация активности фиксирована, и я должен определить ориентацию с помощью акселерометра и понятия не имею, как это сделать.
- person Lekstadt   schedule 07.10.2015
Ответы (1)
Вы можете обнаружить изменение ориентации, переопределив onConfigurationChanged()
следующим образом:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//call your rotate method here
}
Затем, как только вы обнаружите событие изменения ориентации, вы можете выполнить анимированное вращение кнопки следующим образом:
public void rotateView(View view) {
Button button = (Button) view.findViewById(R.id.some_button);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360);
rotateAnimation.setDuration(2000);
button.startAnimation(rotateAnimation);
}
Вы можете установить начальный и конечный угол в конструкторе RotateAnimation
. , затем установите продолжительность анимации (в миллисекундах). Затем вы просто вызываете startAnimation()
для представления, которое хотите анимировать.
person
NoChinDeluxe
schedule
06.10.2015
Спасибо, @drschultz, ваш ответ отличный, проблема в том, что моя ориентация активности исправлена, и onConfigurationChanged всегда дает один и тот же результат. Я бы сказал это, если бы знал, как подойти к этому вопросу. Любая идея о том, как определить ориентацию по осям x и y с помощью SensorEventListener?
- person Lekstadt; 07.10.2015
Если ориентация вашего дисплея заблокирована и не может быть повернута, то, к сожалению, вам нужно будет рассчитать собственные значения поворота, используя данные датчика. Вот где все становится довольно сложным. Вы можете прочитать о датчиках Android в документации здесь и посмотреть некоторые примеры кода, вы можете найти хорошие ответы на Stack Overflow, например этот вопрос здесь. Но я бы открыл новый вопрос, если вам все еще нужна помощь с датчиками.
- person NoChinDeluxe; 07.10.2015
Что касается этого вопроса, я хотел бы попросить вас принять мой ответ, поскольку он действительно отвечает на ваш первоначальный вопрос (и может помочь другим в будущем с аналогичным вопросом). Затем вы можете открыть новый вопрос, если вам нужна помощь в реализации данных датчика.
- person NoChinDeluxe; 07.10.2015
он оживляет, а затем возвращается к предыдущей ориентации с этим.
- person Tooniis; 03.02.2020
используя это, `super.onConfigurationChanged(newConfig);`, делает только то, к чему он привык, и не используя его, приводит к сбою приложения (по крайней мере, на kitkat)
- person horxCoder; 24.08.2020