回答:
これはで行えますActivity.overridePendingTransition()
。XMLリソースファイルで簡単な遷移アニメーションを定義できます。
onCreate
関数でこれを行うことができます。
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にフェードインする場合はonCreate()
、アクティビティBのメソッドに以下を入力します。前setContentView()
に私のために働く。
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
フェードが遅すぎる場合は、android:duration
上記のxmlファイルを小さい値に変更してください。
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
ようです。これらのファイルを表示すると、カスタムアニメーションを改善する方法についてのヒントも得られます(たとえば、フェードインをフェードアウトよりも長くするなど)。
fadein
とfadeout
するfade_in
とfade_out
。Dan Jの投稿より
overridePendingTransition()
呼び出した後、右finish()
および/またはstartActivity()
。新しいアクティビティを起動した直後に呼び出すことで、この方法で素晴らしいフェードを得ることができました。
これを行う簡単な方法は次のとおりです。
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
それでおしまい :)
はい。アクティビティにどのような移行をしたいかをOSに伝えることができます。
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
ここで、ANIMATIONは、OSに組み込まれたアニメーションを参照する整数です。
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;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
デフォルトのアニメーションのリストについては、http://developer.android.com/reference/android/R.anim.htmlを参照してください。
実際fade_in
、fade_out
APIレベル1以上があります。
デフォルトのアクティビティアニメーションを上書きします。私はそれがスムーズに動作することを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>
私のサンプルプロジェクトをダウンロードできます。
それで全部です... :)
次のコードは、2つのアクティビティ間をスムーズに移動します。
左から右への滑らかな効果
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>
右から左に滑らかな効果
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>
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();
overridePendingTransition
すぐ後に startActivity:developer.android.com/reference/android/app/...
Android 1.5ではoverridePendingTransitionを使用できません。overridePendingTransistionはAndroid 2.0で導入されました。
エラーなしでこれを実行する場合は、通常のアニメーション(または独自のアニメーション)を使用してターゲット(1.5以上)をコンパイルするか、overridePendingTransistionを使用してターゲット(2.0以上)をコンパイルする必要があります。
概要:Android 1.5ではoverridePendingTransistionを使用できません。
ただし、OSに組み込まれているアニメーションを使用できます。
IN GALAXYデバイス:
[設定]> [開発者向けオプション]を使用して、デバイスでオフにしていないことを確認する必要があります。
ActivityCompat.startActivity()を使用すると、API> 21で動作します。
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
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();
}
}
ここでは、例として、簡単なフェードインおよびフェードアウトアニメーションがトランジションのデモに使用されました。
ズームインアニメーション
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" />
overridePendingTransition
下記のすべての関連する回答に適用されます:(0, 0)
アニメーションがまったく必要ない場合は合格です。