按下向上按钮时的自定义 Activity 转换

Custom Activity transition when up button is pressed

每当我从当前 activity 按下向上按钮时,父片段就会从右边缘向左滑动,这似乎是默认过渡 behavior.But 我希望父级 activity 从左边缘向右滑动。

我已经将 onBackPressedoverridePendingTransition 和自定义转换 xml 文件一起使用,但我的 onBackPressed 从未被调用。

这是我的 java 代码。

public class TakeOrderItems extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_take_order_items);

    //Get the actionbar to set the back button
    ActionBar ab = getSupportActionBar();
    ab.setDisplayHomeAsUpEnabled(true);

/* 
  CODE TO CREATE AND DISPLAY EXPANDABLELISTVIEW
                                               */


@Override
public void onBackPressed() {
    super.onBackPressed();
    Log.i("Good","back pressed");
    overridePendingTransition(R.transition.slide_in,R.transition.slide_out);
}

XML 过渡文件

slide_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="-100%"
    android:toXDelta="0"
    android:duration="200" />
</set>

slide_out.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%"
    android:duration="200" />
</set>

我检查了很多答案,但它们似乎令人困惑,contradictory.I 认为必须有一种优雅而有效的方法来实现这一点,因为许多应用程序都在使用 this.Please 请帮助 me.Thanks.

overridePendingTransition 放在调用 super.onBackPressed() 上面它必须有效

向上 导航按钮由 onOptionsItemSelected 处理。所以覆盖它:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
    }

    return super.onOptionsItemSelected(item);
}

请注意,此 onOptionsItemSelected 实施假定您的父 activity 已经启动,并且是您的后台堆栈中的下一个。除了完成当前的,您可能还想开始它。

覆盖 Activityfinish 方法以设置转换:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
}

此外,您似乎对 overridePendingTransition 方法名称感到困惑。它需要 animations 作为参数,而不是 transitions.

这将是您的 slide_in 等价物:

<set
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:shareInterpolator="false">

  <translate
    android:fromXDelta="-100%"
    android:toXDelta="0%"
    android:duration="200"/>

</set>

slide_out:

<set
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:shareInterpolator="false">

  <translate
    android:fromXDelta="100%"
    android:toXDelta="200%"
    android:duration="200"/>

</set>

只需将这些文件放在 res/anim 而不是 res/transition