簡體   English   中英

如何實現從右到左的動畫開始活動

[英]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 值,這里有一個非常基本的值說明:X 軸上的活動轉換值

通過這種方式,您可以輕松理解為什么要為當前活動添加 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);
}

另請注意,即使您的代碼沒問題,您的手機也可能關閉了動畫。 要打開然后執行以下操作:

  1. 打開設置並轉到開發人員選項
  2. 確保它已啟用(通過滑動右上角的切換按鈕)
  3. 向下滾動並在“繪圖”下,一一點擊這些選項:Windows 動畫比例、過渡動畫比例和 Animator 持續時間比例
  4. 選擇“動畫比例 1x”

這有幫助嗎?

應在“目標”活動中調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM