Переход активности в Android



Как я могу определить переход между двумя видами деятельности для Android 1.5 и более поздних версий?
Я бы хотел, чтобы исчезать.

776   14  

14 ответов:

вы можете сделать это с помощью Activity.overridePendingTransition(). Вы можете определить простые анимации перехода в файле ресурсов XML.

вот код, чтобы сделать красивый плавный переход между двумя видами деятельности..

создайте файл с именем fadein.xml в res / anim

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/accelerate_interpolator"
   android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />

создайте файл с именем fadeout.xml в res / anim

<?xml version="1.0" encoding="utf-8"?>

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/accelerate_interpolator"
   android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />

Если вы хотите перейти от действия A к действию B, поместите следующее В метод onCreate для действия B. прежде чем setContentView будет работать для меня.

overridePendingTransition(R.anim.fadein, R.anim.fadeout);

Если исчезает слишком медленно для вас, измените android: продолжительность в xml-файлах выше, чтобы что-то поменьше.

еще простой способ сделать это:

  1. Создайте стиль анимации в ваших стилях.xml-файл
<style name="WindowAnimationTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
  1. добавьте этот стиль в тему вашего приложения
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar">
      <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>

вот именно :)

да. Вы можете сказать ОС, какой переход вы хотите иметь для своей деятельности.

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getWindow().setWindowAnimations(ANIMATION);

    ...

}

где анимация-это целое число, относящееся к встроенной анимации в ОС.

список анимаций по умолчанию см.:http://developer.android.com/reference/android/R.anim.html

есть на самом деле fade_in и fade_out для API уровня 1 и выше.

создать res>anim>fadein.xml

<?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />

создать res>anim>затухание.xml

<?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />

в res > значения > стили.xml

<style name="Fade">
        <item name="android:windowEnterAnimation">@anim/fadein</item>
        <item name="android:windowExitAnimation">@anim/fadeout</item>
    </style>

в деятельности onCreate ()

getWindow().getAttributes().windowAnimations = R.style.Fade;

вот код, чтобы сделать хороший гладкий между двумя видами деятельности.

  1. плавный эффект слева направо

    создайте файл с именем slide_in_right.xml и slide_out_right.xml в res / anim

    slide_in_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="5000" android:fromXDelta="100%" android:toXDelta="0%" />
            <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
        </set>
    

    slide_out_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="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
        <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
    </set>
    
  2. плавный эффект справа налево

    создайте файл с именем animation_enter.xml и animation_leave.xml in res / anim

    animation_enter.xml

       <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <translate android:fromXDelta="-100%" android:toXDelta="0%"
            android:fromYDelta="0%" android:toYDelta="0%"
            android:duration="700"/>
       </set>
    

    animation_leave.xml

      <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <translate
            android:fromXDelta="0%" android:toXDelta="100%"
            android:fromYDelta="0%" android:toYDelta="0%"
            android:duration="700" />
      </set>
    
  3. переход от одного действия ко второму действию

       Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
       overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
       startActivity(intent_next);
     finish();
    

    4.На обратной стороне нажмите событие или перейдите от второго действия к одному действию

     Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
     overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
     startActivity(home_intent);
     finish();
    

Я перезаписываю свою анимацию активности по умолчанию. Я тестирую его в api 15, что он работает гладко. Вот решение, которое я использую:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>

</style>

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>

создайте папку anim в папке res, а затем создайте эти четыре файла анимации:

slide_in_right.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="@android:integer/config_mediumAnimTime"/>
</set>

slide_out_left.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="@android:integer/config_mediumAnimTime"/>
</set>

slide_in_left.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="@android:integer/config_mediumAnimTime"/>
</set>

slide_out_right.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="@android:integer/config_mediumAnimTime"/>
</set>

вы можете скачать моя образец проект.

вот и все... :)

вы не можете использовать overridePendingTransition в Android 1.5. overridePendingTransistion пришел на Android 2.0.

Если вы собираетесь пройти через это без каких-либо ошибок, вам нужно скомпилировать для цели (1.5 или выше) с использованием обычных анимаций (или у вас есть) или вам нужно скомпилировать для цели (2.0 или выше) с помощью overridePendingTransistion.

резюме: вы не можете использовать overridePendingTransistion в Android 1.5.

хотя вы можете используйте встроенные анимации в ОС.

в устройствах GALAXY:

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

two muppets

Использовать ActivityCompat.startActivity () работает API > 21.

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
    ActivityCompat.startActivity(activity, intent, options.toBundle());

перед началом вашего намерения:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this);
startActivity(intent, options.toBundle());

Это дает анимацию по умолчанию для вашего перехода деятельности.

некоторые версии Android поддерживают custom Activity переходы, а некоторые нет (старые устройства). Если вы хотите использовать пользовательские переходы, рекомендуется проверить, является ли Activity имеет overridePendingTransition() метод, как и на более старых версиях это не так.

чтобы узнать, существует ли метод или нет, можно использовать API отражения. Вот простой код, который будет проверять и возвращать метод, если он существует:

Method mOverridePendingTransition;

try {
        mOverridePendingTransition = Activity.class.getMethod(
                "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
        /* success */
    } catch (NoSuchMethodException nsme) {
        /* failure, this version of Android doesn't have this method */
    } 

и тогда мы можем применить наш собственный переход, т. е. использовать это метод, если он существует:

if (UIConstants.mOverridePendingTransition != null) {
               try {
                   UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
               } catch (InvocationTargetException e) {
                   e.printStackTrace();
               } catch (IllegalAccessException e) {
                   e.printStackTrace();
               }
            }

здесь, в качестве примера, для демонстрации перехода использовались простые анимации затухания и затухания..

увеличить анимацию

Intent i = new Intent(getApplicationContext(), LoginActivity.class);
 overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();

zoom_enter

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromAlpha="0.0" android:toAlpha="1.0"
    android:duration="500" />

zoom_exit

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromAlpha="1.0" android:toAlpha="0.0"
    android:fillAfter="true"
    android:duration="500" />

Comments

    Ничего не найдено.