按下向上按钮时的自定义 Activity 转换
Custom Activity transition when up button is pressed
每当我从当前 activity 按下向上按钮时,父片段就会从右边缘向左滑动,这似乎是默认过渡 behavior.But 我希望父级 activity 从左边缘向右滑动。
我已经将 onBackPressed
与 overridePendingTransition
和自定义转换 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 已经启动,并且是您的后台堆栈中的下一个。除了完成当前的,您可能还想开始它。
覆盖 Activity
的 finish
方法以设置转换:
@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
。
每当我从当前 activity 按下向上按钮时,父片段就会从右边缘向左滑动,这似乎是默认过渡 behavior.But 我希望父级 activity 从左边缘向右滑动。
我已经将 onBackPressed
与 overridePendingTransition
和自定义转换 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 已经启动,并且是您的后台堆栈中的下一个。除了完成当前的,您可能还想开始它。
覆盖 Activity
的 finish
方法以设置转换:
@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
。