【问题标题】:Android Reveal Animation to start an ActivityAndroid Reveal Animation 启动 Activity
【发布时间】:2016-07-05 12:53:39
【问题描述】:

如何在两个活动之间使用显示动画?有很多关于如何使用它在 Activity 中启动视图的信息和示例,但我想单击一个按钮并启动一个显示动画以打开下一个 Activity。 我尝试在第一个布局中包含第二个布局并将其设置为不可见,然后在单击按钮时显示它。但它不能正常工作。我想知道是否可以简单地将 Reveal 动画定义为 XML,但我不知道该怎么做。 谢谢

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    Reveal Effect 在活动和片段上也成功地为我工作 应用下面的代码来设置对活动或片段的显示效果。删除注释以使用代码下方的特定动画形式。

    ->在 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()

    // 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();
    

    【讨论】:

    • 谢谢,这正是我想要的。
    • 非常感谢。最后我得到了一些解决方案。你能告诉我如何找到右上角的 Cx,Cy 值吗?
    【解决方案2】:

    例如,您可以为 Activity 的父 Layout 设置动画。这是一个可能对您有所帮助的答案。它在 Activity 中淡出,但如果您了解它是如何完成的,您可以应用任何动画。

    Fade In Android Launch Activity

    要取消标准的内置活动动画,您可以使用此Intent.FLAG

    intent.setFlag(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    

    当你开始你的活动时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 2018-01-13
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      相关资源
      最近更新 更多