我有三个活动,它们的启动模式是单实例。 使用onfling(),我将它们左右摆动。
问题是,当我从右向左滑动时,幻灯片转换是可以的,但当我从左向右滑动时,我得到从右向左滑动的转换。
我知道为什么会发生这种情况,因为我总是发送新的意图。但是,现在我需要改变从左向右滑动的动画。
我知道有一个名为overridingTransitionPending()的方法,但我不知道如何在XML中定义我的动画。
我有三个活动,它们的启动模式是单实例。 使用onfling(),我将它们左右摆动。
问题是,当我从右向左滑动时,幻灯片转换是可以的,但当我从左向右滑动时,我得到从右向左滑动的转换。
我知道为什么会发生这种情况,因为我总是发送新的意图。但是,现在我需要改变从左向右滑动的动画。
我知道有一个名为overridingTransitionPending()的方法,但我不知道如何在XML中定义我的动画。
当前回答
此外,你还可以这样做:
FirstClass.this.overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
你不需要添加任何动画xml
其他回答
在res/anim/中使用这个xml
这是用于从左到右的动画:
<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="700"/>
</set>
这是用于从右向左的动画:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700" />
</set>
在你的代码中使用意图,比如从左到右:
this.overridePendingTransition(R.anim.animation_enter,
R.anim.animation_leave);
在你的编码中使用意图,比如从右向左
this.overridePendingTransition(R.anim.animation_leave,
R.anim.animation_enter);
制作了一个示例代码,实现了从左、右、上、下滑动效果。 (对于那些不想制作所有这些anim xml文件的人:))
在github上签出代码
此外,你还可以这样做:
FirstClass.this.overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
你不需要添加任何动画xml
我无法找到任何解决方案,这种类型的动画使用ViewPropertyAnimator。
这里有一个例子:
布局:
<FrameLayout
android:id="@+id/child_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/child_view"
android:gravity="center_horizontal"
android:layout_gravity="center_horizontal"
/>
</FrameLayout>
动画-从右向左和退出视图:
final childView = findViewById(R.id.child_view);
View containerView = findViewById(R.id.child_view_container);
childView.animate()
.translationXBy(-containerView.getWidth())
.setDuration(TRANSLATION_DURATION)
.setInterpolator(new AccelerateDecelerateInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
childView.setVisibility(View.GONE);
}
});
动画-从右向左进入视图:
final View childView = findViewById(R.id.child_view);
View containerView = findViewById(R.id.child_view_container);
childView.setTranslationX(containerView.getWidth());
childView.animate()
.translationXBy(-containerView.getWidth())
.setDuration(TRANSLATION_DURATION)
.setInterpolator(new AccelerateDecelerateInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
childView.setVisibility(View.VISIBLE);
}
});
从右到左的幻灯片
res /动物/ in.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="700" />
</set>
res /动物/ out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="-100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700" />
</set>
在Activity Java文件中:
Intent intent = new Intent(HomeActivity.this, ActivityCapture.class);
startActivity(intent);
overridePendingTransition(R.anim.in,R.anim.out);
您可以更改XML文件中的持续时间,以获得较长或较短的幻灯片动画。