196

Android 1.5以降の2つのアクティビティ間の移行をどのように定義できますか?フェードインするアクティビティをお願いします。

4

14 に答える 14

198

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

で呼び出されるファイルを作成し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にフェードする場合は、アクティビティBonCreate()のメソッドに次のように入力します。私のために働く前に。setContentView()

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

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

于 2011-02-28T17:17:54.773 に答える
167

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

于 2010-08-02T16:09:00.960 に答える
52

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

  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>

それでおしまい :)

于 2014-11-28T01:25:08.093 に答える
32

はい。アクティビティにどのような遷移が必要かをOSに伝えることができます。

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

    ...

}

ここで、ANIMATIONは、OSに組み込まれているアニメーションを参照する整数です。

于 2010-08-02T16:10:39.470 に答える
30

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

実際fade_inにはfade_out、APIレベル1以上の場合があります。

于 2012-01-24T07:37:03.520 に答える
29

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>

アクティビティonCreate()

getWindow().getAttributes().windowAnimations = R.style.Fade;
于 2012-05-14T01:09:25.500 に答える
28

デフォルトのアクティビティアニメーションを上書きします。スムーズに動作することをAPI15でテストします。これが私が使用する解決策です:

<!-- 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>

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

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

于 2016-10-09T12:58:47.283 に答える
26

これは、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. 1つのアクティビティから2番目のアクティビティに移動する

       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();
    
于 2015-07-31T07:21:51.897 に答える
4

Android1.5ではoverridePendingTransitionを使用できません。overridePendingTransistionはAndroid2.0に導入されました。

エラーなしでこれを実行する場合は、通常のアニメーション(または自分が所有する)を使用してターゲット(1.5以上)用にコンパイルするか、overridePendingTransistionを使用してターゲット(2.0以上)用にコンパイルする必要があります。

概要:Android1.5ではoverridePendingTransistionを使用できません

ただし、OSに組み込まれているアニメーションを使用することはできます。

于 2010-08-02T16:50:52.943 に答える
3

インテントを開始する前に:

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

これにより、アクティビティ遷移にデフォルトのアニメーションが与えられます。

于 2017-09-06T15:39:07.327 に答える
2

GALAXYデバイスの場合:

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

2つのマペット

于 2015-05-24T09:35:24.510 に答える
1

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

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
    ActivityCompat.startActivity(activity, intent, options.toBundle());
于 2015-11-25T18:46:50.223 に答える
1

アニメーションをズームアウト

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" />
于 2018-05-30T07:14:42.870 に答える
0

Androidの一部のバージョンはカスタム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();
               }
            }

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

于 2018-05-20T11:55:39.220 に答える