我无法通过按下按钮来确定如何将活动滑入和滑出。我想要的是用户按下按钮然后屏幕滑动。我希望它的方式是第一个活动(带按钮的那个)向左滑动,而新的第二个活动从右边滑入。
使用下面的代码,当单击该按钮时,当我希望它向左滑动时,第一个活动向右滑动。然后当它完成滑动时,剩下的就是黑屏一瞬间,然后第二个活动就会出现而不会滑入。
所以第一个活动滑出错误的方向,下一个活动就会出现而不是滑动。我究竟做错了什么?我很难理解XML文件,所以听到下面所有内容的代码。
第一项活动
@Override
public void onCreate(Bundle savedInstanceState) {
playBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainMenu.this, Levels.class);
startActivity(intent);
overridePendingTransition(R.anim.enter_from_right, R.anim.exit_out_left);
}
});
第二项活动
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.levels);
overridePendingTransition(R.anim.enter_from_left, R.anim.exit_out_right);
所以我认为我的一些XML文件可能不正确。他们在这里。
enter_from_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="100%"
android:toXDelta="0%" >
</translate>
</set>
enter_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="-100%"
android:toXDelta="0%" >
</translate>
</set>
exit_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="0%"
android:toXDelta="-100%" >
</translate>
</set>
exit_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="0%"
android:toXDelta="100%" >
</translate>
</set>
修改
从第二个活动中删除overridePendingTransition()
使得第一个活动向左滑动,这就是我想要的。但是,当第一个活动滑落时,它仍然只是显示黑色屏幕,而不是从右侧滑入第二个活动。
答案 0 :(得分:18)
您只需在startActivity()
来电之后覆盖动画,而不是覆盖onCreate()
和新活动startActivity()
中的动画。
您为int
提供的两个overridePendingTransition(int enterAnim, int exitAnim)
对应于两个动画 - 删除旧Activity
并添加新动画。
对于你的第二个问题,我相信你的fromXDelta设置错误,-100%应该一直离开屏幕的左侧一侧,而不是正确,所以将此更改为100%应该修复它。
答案 1 :(得分:1)
不仅在enter_from_right动画中有一个错误,它应该有一个100%而不是-100%的fromXDelta,但即使在enter_from_left动画中,也应该有一个fromXDelta为-100%而不是100%。
干杯,
答案 2 :(得分:1)
看看我的要点,它完美无缺:
1.Override CommonActivity的startActivity并完成
@Override
public void startActivity(Intent intent) {
super.startActivity(intent);
overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.from_left_in, R.anim.from_right_out);
}
2.from_left_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p"
android:toXDelta="0"
android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>
3.from_right_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p"
android:toXDelta="0" android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>
4.from_left_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0"
android:toXDelta="-100%p"
android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>
5.from_right_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0"
android:toXDelta="100%p"
android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>
要点链接:https://gist.github.com/JagieChen/f5cc44bf663f3722bd19097be47ccf9b
答案 3 :(得分:0)
在您的代码中将fromXDelta
从-100%
改为enter_from_left
并从fromXDelta
改为100%
,这将为您提供正确的滑动动画。
答案 4 :(得分:0)
不要忘记此时的关键! fE。从上移到下。 ivotY是Meen底部的100%,因此您的0%在底部,而-100%在底部,您看不到它。将枢轴设置为边框时,更加方便。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:shareInterpolator="false">
<translate
android:duration="800"
android:fromYDelta="-100%"
android:toYDelta="0%"
android:interpolator="@android:anim/bounce_interpolator"
android:pivotX="50%"
android:pivotY="100%"/>
</set>