私は、アプリがactivity
を開始するたびにアニメーションを適用するデモアプリケーションに取り組んでいます。以下のコードを書きましたが、これはアクティビティを左から右にアニメーション化するためです。
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:fromXDelta="-100%" Android:toXDelta="0%"
Android:fromYDelta="0%" Android:toYDelta="0%"
Android:duration="500"/>
</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>
私はこのようにactivity
を始めています
startActivity(new Intent(this, LoginActivity.class));
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
右から左にアニメーションを実現したい。これを行う方法。
前もって感謝します。
アニメーションファイルに次の変更を加えます。
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>
2番目のアクティビティが右から左にスライドします。
アニメーションのfromXDelta値とtoXDelta値をいじる方法をよりよく理解するために、値の非常に基本的な図を以下に示します。
これにより、現在のアクティビティにAndroid:fromXDelta = "0%"およびAndroid:toXDelta = "-100%"を追加した理由を簡単に理解できます。これは、0%から-100%の位置に移動するためです。
[編集]
したがって、ActivityAからActivityBを開きたい場合は、次の操作を行います(ボタンがあるとしましょう)。
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);
}
});
ここで、最初のアニメーションの「後方」アニメーションを作成する場合、アクティビティ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);
}
また、アップナビゲーションを有効にしている場合、この場合もアニメーションを追加する必要があります。
次のようなUPナビゲーションを有効にします。
@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's 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);
}
また、コードに問題がない場合でも、携帯電話のアニメーションがオフになっている可能性があることに注意してください。それをオンにするには、次の手順を実行します。
これは役立ちますか?
overridePendingTransition
は、「ターゲット」アクティビティで呼び出す必要があります。例:アクティビティA-> Bから、overridePendingTransition
呼び出しをアクティビティBのonCreate
に配置します。
ユーザーがシステムレベルでアニメーションを無効にしている場合、アニメーションを強制的に表示することはできません。
編集:
例は次のようになります。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.enter, R.anim.exit);
}
これは私にとって完璧なコードです
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fromXDelta="100%p"
Android:toXDelta="0"
Android:duration="800"/>
Slideinright
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fromXDelta="0"
Android:toXDelta="-100%p"
Android:duration="800"/>
活動中
Intent intent = new Intent(getApplicationContext(),termcondionactivity.class);
Bundle bndlAnimation = ActivityOptions.makeCustomAnimation(getApplicationContext(), R.anim.slideinleft, R.anim.slideinright).toBundle();
startActivity(intent, bndlAnimation);
このコードを試してください、それは私のために働いています
右から左にスライドするには
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fillAfter="true" >
<translate
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="500"
Android:fromXDelta="0%"
Android:toXDelta="-50%" >
</translate>
</set>
左から右にスライドする
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="500"
Android:fromXDelta="-50%"
Android:toXDelta="0%" >
</translate>