当切换活动时,我如何触发单个视图上的动画?例如,如果用户点击按钮进入下一页,我希望我的某些视图飞出屏幕,并且在背景淡入下一个屏幕时交叉淡出,而不是整个屏幕作为一个整体动画。
这种情况是否可能?如果可能,应该如何实现?(我使用的是最新的API4.1,不需要向后兼容)
编辑:目前,在onResume()中调用转场动画的效果很好,但当我按返回键时,活动切换得比onPause()启动的任何动画都快,这让我认为有更好的方法/地方来做这件事。
这种情况是否可能?如果可能,应该如何实现?(我使用的是最新的API4.1,不需要向后兼容)
编辑:目前,在onResume()中调用转场动画的效果很好,但当我按返回键时,活动切换得比onPause()启动的任何动画都快,这让我认为有更好的方法/地方来做这件事。
您可以这样设置动画(如幻灯片),当您在活动之间切换时:
slide_in.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="200"/>
</set>
slie_out.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="200" />
</set>
Then on your java code just write this :
Intent i = new Intent(YourActivity.this, OtherActivity.class);
this.startActivity(i);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
重写onResume()方法可以正常工作,但是在移动到下一个屏幕之前,onPause/onStop不会等待动画完成。
无论什么事件启动,例如按钮单击,都需要在调用start activity之前启动动画。
button.setOnClickListener(new ViewOnClickListener() {
@Override
void onClick(... {
// start animations
// wait till they are finished
// start activity
}
});
由于每个启动新活动的事件都将具有动画代码,因此我建议将其移入某种辅助类中,以避免在各处重复代码。例如:
button1.setOnClickListener(new ViewOnClickListener() {
@Override
void onClick(... {
helper.AnimateViews(/* probably pass activity or context */);
// start activity
}
});
button2.setOnClickListener(new ViewOnClickListener() {
@Override
void onClick(... {
helper.animateViews(/* probably pass activity or context */);
// start activity
}
});
public class ViewAnimiationHelper {
public void animateViews(Activity activity) {
// find all views if not found then don't animate them
View view1 = activity.findViewById(R.id.view1);
if(view1 != null) {
// animate view
}
View view2 = activity.findViewById(R.id.view1);
if(view2 != null) {
// animate view
}
}
}
这是完全使用sudo Java代码,但希望足以让您了解其思路。祝您好运!