Android显示动画以开始活动
如何在两个活动之间使用显示动画??有很多关于如何使用它在活动内启动视图的信息和示例,但是我想单击一个按钮并启动一个显示动画以打开下一个活动。 我尝试将第二个布局包含在第一个布局中,并将其设置为不可见,然后在单击按钮时显示它。但是它不好用。我想知道是否可以简单地将显示动画定义为XML,但我不知道如何定义。Android显示动画以开始活动,android,android-animation,Android,Android Animation,如何在两个活动之间使用显示动画??有很多关于如何使用它在活动内启动视图的信息和示例,但是我想单击一个按钮并启动一个显示动画以打开下一个活动。 我尝试将第二个布局包含在第一个布局中,并将其设置为不可见,然后在单击按钮时显示它。但是它不好用。我想知道是否可以简单地将显示动画定义为XML,但我不知道如何定义。 谢谢例如,您可以为活动的父级布局设置动画。这里有一个可能对你有帮助的答案。它会在活动中淡出,但如果您了解它是如何完成的,则可以应用任何动画 要取消标准内置活动动画,可以使用以下方法: 当你们开
谢谢例如,您可以为活动的父级布局设置动画。这里有一个可能对你有帮助的答案。它会在活动中淡出,但如果您了解它是如何完成的,则可以应用任何动画 要取消标准内置活动动画,可以使用以下方法:
当你们开始你们的活动时。展示效果在活动和片段上也成功地对我起作用 应用下面的代码设置对活动或片段的显示效果。删除注释以使用代码下面的特定动画形式 ->在setcontentview之后应用此代码
rootview = (RelativeLayout) findViewById(R.id.rootview);
rootview.setBackgroundColor(getResources().getColor(R.color.colorAccent));
rootview.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
v.removeOnLayoutChangeListener(this);
/*//BOTTOM RIGHT TO TOP LEFT ANIMATION
int cx = (framelayout.getLeft() + framelayout.getRight());
int cy = (framelayout.getTop() + framelayout.getBottom());
// get the hypothenuse so the radius is from one corner to the other
int radius = (int) Math.hypot(right, bottom);
Animator reveal = ViewAnimationUtils.createCircularReveal(v, cx, cy, 0, radius);
reveal.setInterpolator(new AccelerateDecelerateInterpolator());
reveal.setDuration(600);
reveal.start();*/
/* //LEFT TOP TO BOTTOM RIGHT ANIMATION
int cx1 = 0;
int cy1 = 0;
// get the hypothenuse so the radius is from one corner to the other
int radius1 = (int) Math.hypot(right, bottom);
Animator reveal1 = ViewAnimationUtils.createCircularReveal(v, cx1, cy1, 0, radius1);
reveal1.setInterpolator(new DecelerateInterpolator(2f));
reveal1.setDuration(1000);
reveal1.start();*/
/* //EFFECT START WITH CENTER
float finalRadius = (float) Math.hypot(v.getWidth(), v.getHeight());
int cx1 = (framelayout.getLeft() + framelayout.getRight()) / 2;
int cy1 = (framelayout.getTop() + framelayout.getBottom()) / 2;
Animator anim = ViewAnimationUtils.createCircularReveal(v, cx1, cy1, 0, finalRadius);
anim.setDuration(1000);
anim.setInterpolator(new AccelerateDecelerateInterpolator());
anim.start();*/
//OPEN WITH BOTTOM CENTER
int cx = (rootview.getLeft() + rootview.getRight()) / 2;
int cy = (rootview.getTop() + rootview.getBottom());
// get the hypothenuse so the radius is from one corner to the other
int radius = (int) Math.hypot(right, bottom);
Animator reveal = ViewAnimationUtils.createCircularReveal(v, cx, cy, 0, radius);
reveal.setInterpolator(new AccelerateDecelerateInterpolator());
reveal.setDuration(350);
reveal.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
// rootview.setBackgroundResource(R.color.white);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
reveal.start();
}
});
->隐藏显示效果onBackPressed()
谢谢,这正是我想要的。非常感谢你。最后我找到了一些解决办法。您能告诉我如何找到右上角的Cx,Cy值吗。
rootview = (RelativeLayout) findViewById(R.id.rootview);
rootview.setBackgroundColor(getResources().getColor(R.color.colorAccent));
rootview.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
v.removeOnLayoutChangeListener(this);
/*//BOTTOM RIGHT TO TOP LEFT ANIMATION
int cx = (framelayout.getLeft() + framelayout.getRight());
int cy = (framelayout.getTop() + framelayout.getBottom());
// get the hypothenuse so the radius is from one corner to the other
int radius = (int) Math.hypot(right, bottom);
Animator reveal = ViewAnimationUtils.createCircularReveal(v, cx, cy, 0, radius);
reveal.setInterpolator(new AccelerateDecelerateInterpolator());
reveal.setDuration(600);
reveal.start();*/
/* //LEFT TOP TO BOTTOM RIGHT ANIMATION
int cx1 = 0;
int cy1 = 0;
// get the hypothenuse so the radius is from one corner to the other
int radius1 = (int) Math.hypot(right, bottom);
Animator reveal1 = ViewAnimationUtils.createCircularReveal(v, cx1, cy1, 0, radius1);
reveal1.setInterpolator(new DecelerateInterpolator(2f));
reveal1.setDuration(1000);
reveal1.start();*/
/* //EFFECT START WITH CENTER
float finalRadius = (float) Math.hypot(v.getWidth(), v.getHeight());
int cx1 = (framelayout.getLeft() + framelayout.getRight()) / 2;
int cy1 = (framelayout.getTop() + framelayout.getBottom()) / 2;
Animator anim = ViewAnimationUtils.createCircularReveal(v, cx1, cy1, 0, finalRadius);
anim.setDuration(1000);
anim.setInterpolator(new AccelerateDecelerateInterpolator());
anim.start();*/
//OPEN WITH BOTTOM CENTER
int cx = (rootview.getLeft() + rootview.getRight()) / 2;
int cy = (rootview.getTop() + rootview.getBottom());
// get the hypothenuse so the radius is from one corner to the other
int radius = (int) Math.hypot(right, bottom);
Animator reveal = ViewAnimationUtils.createCircularReveal(v, cx, cy, 0, radius);
reveal.setInterpolator(new AccelerateDecelerateInterpolator());
reveal.setDuration(350);
reveal.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
// rootview.setBackgroundResource(R.color.white);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
reveal.start();
}
});
// previously visible view
final View myView = findViewById(R.id.rootview);
// get the center for the clipping circle
int cx = myView.getWidth() / 2;
int cy = myView.getHeight() / 2;
// get the initial radius for the clipping circle
float initialRadius = (float) Math.hypot(cx, cy);
// create the animation (the final radius is zero)
Animator anim =
ViewAnimationUtils.createCircularReveal(myView, cx, cy, initialRadius, 0);
anim.setDuration(50);
// make the view invisible when the animation is done
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
myView.setVisibility(View.INVISIBLE);
}
});
// start the animation
anim.start();