2013-06-09 2 views
2

Я работаю над приложением, которое состоит из многих видов деятельности, представляющих этапы. Таким образом, есть Stage1Activity, Stage2Activity, Stage3Activity и т. Д. В каждом действии есть кнопка (или несколько кнопок), которые после щелчка переходят к следующему действию. То, что я хотел сделать, - это оживить переход между этими действиями.Push In/Out Анимация между действиями

Я добавил два файла XML в папку res/anim. Push_left_in.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/> 
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /> 
</set> 

И push_left_out.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/> 
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" /> 
</set> 

В основной деятельности, Stage1Activity у меня есть:

public class Stage1Activity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_stage1); 
    overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event){ 
     if (keyCode == KeyEvent.KEYCODE_BACK){ 
      finish(); 
      overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 

Теперь, когда я перехожу через деятельность в переходный период работает так, как должно. Новая активность выталкивает старую из поля зрения справа налево. Я хотел получить обратный эффект, когда пользователь нажимает кнопку «Назад» на своем устройстве, однако одна и та же переходная анимация разыгрывается. Я играл с андроидом: из тегаXDelta и достиг некоторых довольно странных результатов, но я просто не знаю, как его установить, чтобы при нажатии кнопки «Назад» на устройстве новая активность (фактически старая, недавно вызванная с намерением) выталкивает старый слева направо.

В принципе, я хочу, чтобы он выглядел так, будто вы двигаетесь вправо, когда прогрессируете по этапам, но когда вы отжимаете назад, он должен выглядеть так, как будто вы вернулись (слева). Извиняюсь, если это глупый вопрос, но я действительно запутался, и мне очень нужна помощь:/

ответ

8

Не знаю, как ответить на мой вопрос. Полагаю ... Но я думаю, что я просто убираю свой беспорядок. Я провел более обширные исследования и играл с кодом, и я с гордостью могу сказать, что я решил проблему. Ниже приведено решение для ссылки на всех, кому это может понадобиться.

Для этого приложения необходимы четыре анимации. Сначала, щелкнув по кнопке Stage1Activity, я хотел сдвинуть и потушить эту активность влево, в то время как скользя в Stage2Activity справа налево. Для этого требуется два XML файла:

push_left_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%" android:toXDelta="0" android:duration="500"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" /> 
</set> 

push_left_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="-100%" android:duration="500"/> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" /> 
</set> 

Эти два файла называются в overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); команды, помещенной в onCreate, прямо под setContentView. Один из них вытесняет старую активность, другой активирует новую активность. Теперь мне просто нужен был противоположный эффект, когда на устройстве нажата кнопка «Назад». Это потребовало совершенно новой анимации (что-то, чего я не сразу понял).

Так что я добавить еще два XML файла:

push_right_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%" android:duration="500"/> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" /> 
</set> 

push_right_out.XML

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%" android:toXDelta="0" android:duration="500"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" /> 
</set> 

Эти две другие файлы называются в overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out); помещенного в методе onKeyDown для Бэк ответа кнопки. Один из них удаляет старую активность, а другой сместит новую активность, но в обратном направлении по сравнению с предыдущей анимацией. Не забудьте также изменить значения альфа, потому что это случилось со мной lol

В любом случае этот вопрос сейчас закрыт. Извините за беспокойство! Или нет, так как я, по крайней мере, получил достижение Tumbleweed для него XD

+0

Но для меня проблема возникает в случае, когда я не хочу закончить выход из Activity (я просто хочу начать следующую над предыдущей) ... – VladimirVip

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