Ответ 1
Сделайте эти изменения в ваших файлах анимации:
enter.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="500"
android:fromXDelta="100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
exit.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="500"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="-100%"
android:toYDelta="0%" />
</set>
У вас будет вторая активность, скользящая справа налево.
Для лучшего понимания того, как играть с значениями fromXDelta и toXDelta для анимаций, приведена очень базовая иллюстрация значений:
Таким образом, вы можете легко понять, почему вы добавляете android: fromXDelta = "0%" и android: toXDelta = "- 100%" для вашей текущей деятельности. И это потому, что вы хотите, чтобы он переместился с 0% до -100%.
[EDIT]
Итак, если вы хотите открыть ActivityB из ActivityA, вы выполните следующее (скажем, у вас есть кнопка):
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(ActivityA.this, ActivityB.class));
overridePendingTransition(R.anim.enter, R.anim.exit);
}
});
Теперь, если вы хотите иметь "обратную" анимацию первого, когда вы покидаете Activity B, вам понадобятся 2 новых файла анимации и некоторый код в методе ActivityB onBackPressed, например:
Сначала файлы анимации: left_to_right.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="500"
android:fromXDelta="-100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
right_to_left.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="500"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="100%"
android:toYDelta="0%" />
</set>
И в ActivityB сделайте следующее:
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}
Также, если вы включили навигацию, вам также нужно добавить анимацию:
Вы активируете навигацию типа ВВЕРХ:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
И так вы обрабатываете анимацию в этом случае:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar Up/Home button
case android.R.id.home:
//NavUtils.navigateUpFromSameTask(this);
finish();
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
return true;
}
return super.onOptionsItemSelected(item);
}
Также имейте в виду, что даже если ваш код в порядке, ваш телефон может отключить анимацию. Чтобы включить затем, выполните следующие действия:
- Откройте "Настройки" и перейдите в "Параметры разработчика"
- Удостоверьтесь, что он включен (сдвинув кнопку переключения в правом верхнем углу)
- Прокрутите вниз и в разделе "Рисование" коснитесь этих параметров один за другим: масштаб анимации Windows, масштаб анимации перехода и масштаб анимации аниматора.
- Выберите "Масштаб анимации 1x"
Помогает ли это?