5

Chcę, aby przycisk obrazu obracał się podczas zmiany orientacji urządzenia. Powinien obracać się o 90, 180, 270 i 360 kątów, a jego względny układ powinien pozostać stały, tak aby tylko przyciski się poruszały. Jak to zrobić? Zrobiłem trochę badań, ale nie znalazłem nic, co mogłoby mi pomóc.Jak obracać przyciski przy zmianie orientacji bez obracania układu?

+0

Musisz przerwać zadanie na kawałki: 1 zatrzymać odtwarzanie aktywności na rotacji. 2. Łapanie rotacji. 3. Obracanie widoku .... Każda z tych części ma już odpowiedź, tutaj na SO ... Trudno uwierzyć, że nic nie znalazłeś ... – Selvin

+0

Nie wiedziałem, jak podzielić moje pytanie do tych kawałków. Jestem newie na Androida i Javę. Nadal mam problem, ponieważ moja orientacja na aktywność jest stała i muszę wykryć orientację za pomocą akcelerometru i nie mam pojęcia, jak to zrobić. –

Odpowiedz

2

można wykryć zmiany orientacji nadrzędnymi takiego:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    //call your rotate method here 
} 

Wtedy gdy wykryje zdarzenie zmiany orientacji, można wykonać animowany obrót na przycisk jak ten:

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); 
} 

Możesz ustawić początkowy i końcowy kąt w konstruktorze RotateAnimation, a następnie ustawić czas trwania animacji (w milisekundach). Następnie po prostu zadzwoń pod numer startAnimation() w widoku, który chcesz animować.

+0

Dziękuję, @drschultz, twoja odpowiedź jest świetna, problem polega na tym, że moja orientacja w działaniu jest stała i naConfigurationChanged zawsze daje taki sam wynik. Powiedziałbym to, gdybym wiedział, jak podejść do tego problemu. Masz pomysł, jak wykryć orientację za pomocą osi X i Y za pomocą SensorEventListener? –

+1

Jeśli orientacja ekranu jest zablokowana i nie można go obrócić, wówczas niestety trzeba obliczyć własne wartości obrotu za pomocą danych czujnika. Właśnie tam sprawy stają się dość skomplikowane. Możesz przeczytać o [Android Sensors w dokumentacji tutaj] (http://developer.android.com/guide/topics/sensors/sensors_overview.html), a żeby zobaczyć przykłady kodu, możesz znaleźć dobre odpowiedzi na temat przepełnienia stosu jak [tutaj to pytanie] (http://stackoverflow.com/questions/27106607/get-rotation-and-display-in-degrees). Ale otworzyłbym nowe pytanie, jeśli nadal potrzebujesz pomocy przy czujnikach. – NoChinDeluxe

+0

Jeśli chodzi o to pytanie, uprzejmie proszę o zaakceptowanie mojej odpowiedzi, ponieważ odpowiada ona na twoje pierwotne pytanie (i może pomóc innym w przyszłości z podobnym pytaniem). Następnie możesz otworzyć nowe pytanie, jeśli potrzebujesz pomocy w zakresie wdrażania danych z czujników. – NoChinDeluxe