5

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

+0

Вы должны разбить задачу на части: 1 остановка воссоздания активности при вращении. 2. Ловля вращения. 3. Вращение представления ... Каждой из этих частей уже есть ответ, здесь на SO ... Трудно поверить, что вы ничего не нашли ... – Selvin

+0

Я не знал, как разделить мои вопрос в эти части. Я новичок в Android и Java. У меня все еще есть проблема, потому что моя ориентация активности фиксирована, и я должен определить ориентацию с помощью акселерометра и не знаю, как это сделать. –

ответ

2

Вы можете обнаружить изменение ориентации по приоритету так:

@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() на вид, который хотите оживить.

+0

Спасибо, @drschultz, ваш ответ велик, проблема в моей ориентации активности фиксирована, а onConfigurationChanged всегда дает тот же результат. Я бы сказал это, если бы знал, как подойти к этой проблеме. Любая идея о том, как определить ориентацию с осью x и y с помощью SensorEventListener? –

+1

Если ориентация дисплея заблокирована и не может быть повернута, то, к сожалению, вам нужно будет рассчитать собственные значения вращения с использованием данных датчика. Вот где вещи становятся довольно сложными. Вы можете прочитать о [Android-датчиках в документах здесь] (http://developer.android.com/guide/topics/sensors/sensors_overview.html), и чтобы увидеть примеры кода, вы можете найти хорошие ответы на переполнение стека как [этот вопрос здесь] (http://stackoverflow.com/questions/27106607/get-rotation-and-display-in-degrees). Но я бы открыл новый вопрос, если вам все еще нужна помощь с сенсорным материалом. – NoChinDeluxe

+0

Что касается этого вопроса, я прошу вас принять мой ответ, поскольку он отвечает на ваш первоначальный вопрос (и может помочь другим в будущем с аналогичным вопросом). Затем вы можете открыть новый вопрос, если вам нужна помощь в отношении использования данных датчиков. – NoChinDeluxe

 Смежные вопросы

  • Нет связанных вопросов^_^