Как повернуть кнопки при изменении ориентации без поворота макета?

Я хочу, чтобы ImageButton вращался при изменении ориентации устройства. Он должен вращаться на 90, 180, 270 и 360 градусов, а его относительное расположение должно оставаться стабильным, чтобы двигались только кнопки. Как это может быть сделано? Я провел некоторые исследования, но не нашел ничего, что могло бы мне помочь.


person Lekstadt    schedule 06.10.2015    source источник
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
comment
Спасибо, @drschultz, ваш ответ отличный, проблема в том, что моя ориентация активности исправлена, и onConfigurationChanged всегда дает один и тот же результат. Я бы сказал это, если бы знал, как подойти к этому вопросу. Любая идея о том, как определить ориентацию по осям x и y с помощью SensorEventListener? - person Lekstadt; 07.10.2015
comment
Если ориентация вашего дисплея заблокирована и не может быть повернута, то, к сожалению, вам нужно будет рассчитать собственные значения поворота, используя данные датчика. Вот где все становится довольно сложным. Вы можете прочитать о датчиках Android в документации здесь и посмотреть некоторые примеры кода, вы можете найти хорошие ответы на Stack Overflow, например этот вопрос здесь. Но я бы открыл новый вопрос, если вам все еще нужна помощь с датчиками. - person NoChinDeluxe; 07.10.2015
comment
Что касается этого вопроса, я хотел бы попросить вас принять мой ответ, поскольку он действительно отвечает на ваш первоначальный вопрос (и может помочь другим в будущем с аналогичным вопросом). Затем вы можете открыть новый вопрос, если вам нужна помощь в реализации данных датчика. - person NoChinDeluxe; 07.10.2015
comment
он оживляет, а затем возвращается к предыдущей ориентации с этим. - person Tooniis; 03.02.2020
comment
используя это, `super.onConfigurationChanged(newConfig);`, делает только то, к чему он привык, и не используя его, приводит к сбою приложения (по крайней мере, на kitkat) - person horxCoder; 24.08.2020