切换活动时如何在单个视图上触发动画?即,如果用户单击一个按钮转到下一页,我希望我的一些视图飞出屏幕,并让背景交叉淡入淡出到下一个屏幕,而不是让整个屏幕作为一个整体进行动画处理。
这可能吗?如果是这样,应该怎么做?(我使用的是最新的 API 4.1,它不必向后兼容)
编辑:目前,通过在 onResume() 中调用它来进行过渡动画效果很好,但是当我按下返回时,活动的切换速度比在 onPause() 中启动的任何动画都快,所以这让我觉得有更好的方式/地方去做这个。
切换活动时如何在单个视图上触发动画?即,如果用户单击一个按钮转到下一页,我希望我的一些视图飞出屏幕,并让背景交叉淡入淡出到下一个屏幕,而不是让整个屏幕作为一个整体进行动画处理。
这可能吗?如果是这样,应该怎么做?(我使用的是最新的 API 4.1,它不必向后兼容)
编辑:目前,通过在 onResume() 中调用它来进行过渡动画效果很好,但是当我按下返回时,活动的切换速度比在 onPause() 中启动的任何动画都快,所以这让我觉得有更好的方式/地方去做这个。
覆盖 onResume() 可以正常工作,但 onPause/onStop 在移动到下一个屏幕之前不要等待动画完成。
什么开始事件前。按钮单击需要在调用启动活动之前启动动画。
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 代码,但希望足以让您明白这一点。祝你好运!
当您在这样的活动之间切换时,您可以设置动画(如幻灯片):
幻灯片输入.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>
然后在你的java代码上写这个:
Intent i = new Intent(YourActivity.this, OtherActivity.class);
this.startActivity(i);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
如果您在真实设备上进行测试,请不要忘记让它播放动画(设置 -> 显示 -> 动画 -> 所有动画)
希望能帮助到你 !:)