我无法弄清楚如何通过按一个button来滑动活动。 我想要的是用户按下button,然后屏幕滑动。 我想要的方式是第一个活动(带button的活动)向左滑动,而新的第二个活动从右侧滑入。
用下面的代码,当点击button时,第一个活动向右滑动,当我想要向左滑动时。 然后,当它完成滑动,剩下的只是一秒钟的黑屏,然后第二个活动刚刚出现,并没有滑入。
所以第一个活动是滑出不正确的方向,下一个活动刚刚出现,而不是滑动。 我究竟做错了什么? 我很难理解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()
使得第一个活动向左滑出,这是我想要的。 但是,当第一个活动滑过时,它仍然只是显示一个黑屏,而不是从第二个活动滑入右侧。
而不是在startActivity()
和新的活动onCreate()
中重写animation,只需要在startActivity()
调用之后重写animation。
您为overridePendingTransition(int enterAnim, int exitAnim)
提供的两个int
对应于两个animation – 删除旧的Activity
并添加新的animation。
对于你的第二个问题,我相信你已经把fromXDelta设置成错了,-100%应该完全离开屏幕的左边 ,而不是右边,所以把它改成100%就应该修正它。
不仅在enter_from_rightanimation中有一个错误,它应该具有100%的fromXDelta而不是-100%,但即使在enter_from_rightanimation中,也应该具有-100%而不是100%的xDelta。
干杯,
从enter_from_left
fromXDelta
将enter_from_left
更改为-100%
from enter_from_left
fromXDelta
为100%
,这将为您提供正确的滑动animation。
看看我的要点,它完美的作品:
1.覆盖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