web-dev-qa-db-ja.com

Androidでのアクティビティ遷移

Android 1.5以降の2つのアクティビティ間の移行を定義する方法を教えてください。フェードインするアクティビティをお願いします。

179
hpique

これは Activity.overridePendingTransition() で行えます。単純な遷移アニメーションをXMLリソースファイルに定義できます。

161
iandisme

これは、2つのアクティビティ間でスムーズにフェードアウトするためのコードです。

fadein.xmlres/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.xmlres/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" />

Activity AからActivity Bにフェードインする場合は、Activity BonCreate()メソッドに次のように入力します。 setContentView()が私のために働く前に。

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

フェードが遅すぎる場合は、上記のxmlファイルのAndroid:durationをもっと小さいものに変更してください。

184
Ben Clayton

それを行うさらに簡単な方法は、次のとおりです。

  1. Styles.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>

それでおしまい :)

40
Felipe Conde

はい。あなたはあなたの活動のためにどのような移行をしたいのかをOSに伝えることができます。

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

    ...

}

ここで、ANIMATIONはOSの組み込みアニメーションを指す整数です。

31
CaseyB

デフォルトのアニメーションのリストについては、次を参照してください。 http://developer.Android.com/reference/Android/R.anim.html

実際には、APIレベル1以上ではfade_infade_outがあります。

29
Kevin C. Krinke

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> fadeout.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> values> styles.xml内

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

CreateCreate()のアクティビティ中

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

これは、2つのアクティビティの間をスムーズにするコードです。

  1. 左から右への滑らかな効果

    Res/animにslide_in_right.xmlおよびslide_out_right.xmlというファイルを作成します。

    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. 右から左への滑らかな効果

    Res/animにanimation_enter.xmlおよびanimation_leave.xmlというファイルを作成します。

    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.バックプレスイベントまたは2番目のアクティビティから1つのアクティビティへのナビゲート

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

デフォルトのアクティビティアニメーションを上書きします。私はそれがスムーズに動作することを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>

Resフォルダの下にanimフォルダを作成してから、次の4つのアニメーションファイルを作成します。

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>

私の サンプルプロジェクト をダウンロードできます。

それで全部です... :)

19

Android 1.5ではoverridePendingTransitionを使用できません。 overridePendingTransistionはAndroid 2.0になりました。

エラーなしでこの問題を解決するには、通常のアニメーションを使用して(1.5以上)ターゲット用にコンパイルするか、overridePendingTransistionを使用してターゲット用(2.0以上)にコンパイルする必要があります。

概要:Android 1.5ではoverridePendingTransistionを使用できません

あなたはしかし、OSの内蔵アニメーションを使用することができます。

4
Curtain

GALAXY機器の場合:

設定>開発者向けオプションを使用して、デバイスの電源を切っていないことを確認する必要があります。

two muppets

2
Maher Ismaail

あなたの意図を始める前に:

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

これはあなたの活動移行にデフォルトのアニメーションを与えます。

1
devDeejay

ActivityCompat.startActivity()を使用すると、API> 21で動作します。

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

AndroidのいくつかのバージョンはカスタムActivityトランジションをサポートし、いくつかはサポートしません(古いデバイス)。カスタムトランジションを使用したい場合は、ActivityoverridePendingTransition()メソッドがあるかどうかを確認することをお勧めします。古いバージョンではそうではありません。

メソッドが存在するかどうかを知るには、リフレクション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();
               }
            }

ここでは、例として、単純なフェードインアニメーションとフェードアウトアニメーションをトランジションのデモに使用しました。

0
Serj Ardovic

アニメーションをズームインする

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" />
0
user8356857