2014-10-17 83 views
41

我正在開發一個演示應用程序,我想在應用程序啓動任何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); 

我要實現到左的動畫權。如何做到這一點。

在此先感謝。

回答

87

做這些修改您的動畫文件:

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> 

你有你的第二個活動由右至左滑動。

有關如何玩弄了動畫的fromXDelta和toXDelta值更好的理解,這裏是價值一個非常基本的例證: Activity transition values on X axis

這樣你就可以很容易地理解爲什麼你添加的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個新的動畫文件和一些代碼,如下所示:

首先動畫文件: 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); 
} 

此外,如果你有最多具備導航功能,你必須添加動畫在這種情況下:

你啓用這樣的導航:

@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. 向下滾動,繪圖下,自來水這些選項逐個:視窗動畫比例,過渡動畫縮放,動畫和時間尺度
  4. 選擇「動畫縮放1x」

這是否幫助?

+0

寫什麼,開始活動和目標活動? – 2014-10-17 18:49:52

+1

我會編輯我的答案以添加此 – Mike 2014-10-17 18:50:15

+0

如果您在此處添加從左到右的信息,那麼這將非常有用 – 2014-10-17 18:55:23

1

試試這個代碼,它的工作對我來說

從右滑動至左

<?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> 
5

overridePendingTransition應在「目標」活動中調用。例如:從活動A→B,您可以將overridePendingTransition呼叫置於活動B的onCreate中。

請記住,如果用戶已在系統級別上禁用動畫,則不能強制動畫顯示。

編輯:

一個例子是這樣的:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    overridePendingTransition(R.anim.enter, R.anim.exit); 
} 
+0

在目標活動中寫什麼來達到目標​​? – 2014-10-17 18:47:38

+0

請參閱編輯示例以添加到您的活動A和B. – soundsofpolaris 2014-10-17 21:41:23