[英]How to achieve right to left animation to start the activity
我正在開發一個演示應用程序,我想在應用程序啟動任何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);
我想實現從右到左的動畫。 如何做到這一點。
提前致謝。
對動畫文件進行以下修改:
輸入.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>
退出.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>
您的第二個活動將從右向左滑動。
為了更好地理解如何處理動畫的 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);
}
});
現在,如果您想擁有第一個的“向后”動畫,當您離開 Activity 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
。 例如:從 Activity A -> B 開始,您可以將overridePendingTransition
調用放在 Activity B 的onCreate
中。
請記住,如果用戶在系統級別禁用了動畫,則無法強制顯示動畫。
編輯:
一個示例如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.enter, R.anim.exit);
}
這對我來說是完美的代碼 Slideinleft
<?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"/>
向右滑動
<?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>
要在整個應用程序上應用活動過渡動畫,我們需要遵循幾個步驟。
步驟 1. 創建四個動畫資源。 (slide_in_left、slide_in_right、slide_out_left 和 slide_out_right)
資源文件:slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="-100%p"
android:toXDelta="0" />
</set>
資源文件:slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%p"
android:toXDelta="0" />
</set>
資源文件:slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:toXDelta="-100%p" />
</set>
資源文件:slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:toXDelta="100%p" />
</set>
步驟 2. 創建自定義樣式並使用動畫資源。
<style name="MyCustomActivityAnimation" 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>
步驟 3. 將樣式應用到應用程序的主題。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:windowAnimationStyle">@style/MyCustomActivityAnimation</item>
</style>
步驟 4. 在 Manifest 中將主題應用於您的應用程序。
<application
....
android:theme="@style/AppTheme"
>
....
</application>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.