简体   繁体   English

Android Reveal Animation开始一项活动

[英]Android Reveal Animation to start an Activity

how can I use Reveal Animation between two activities?? 如何在两个活动之间使用Reveal Animation? There's a lot of information and examples about how to use it to start a view inside an Activity, but I want to click a button and start a Reveal Animation to open the next Activity. 有很多关于如何使用它来启动Activity内部视图的信息和示例,但是我想单击一个按钮并启动一个Reveal Animation来打开下一个Activity。 I tried including the second layout inside the first one and setting it Invisible, and then reveal it when the button is clicked. 我尝试在第一个布局中包含第二个布局并将其设置为Invisible,然后在单击按钮时显示它。 But it doesn't work fine. 但它不能正常工作。 I'm wondering if I can simply define the Reveal animation as an XML, but I wouldn't know how to. 我想知道我是否可以简单地将Reveal动画定义为XML,但我不知道该怎么做。 Thanks 谢谢

Reveal Effect successfully worked for me on activity and fragment too Apply below code to set reveal effect on activity or fragment. Reveal Effect对我的活动和片段成功起作用也应用下面的代码来设置揭示对活动或片段的影响。 Remove Comment to use specific animation form below code. 删除注释以使用代码下方的特定动画表单。

->Apply this code after setcontentview - >在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();


                }
            });

->To Hide Reveal effect onBackPressed() - >隐藏显示效果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();

You can for example animate the parent Layout of your activity. 例如,您可以为活动的父布局设置动画。 Here is an answer that might help you. 这是一个可能对您有帮助的答案。 It fades in the Activity but if you understand how its done you can apply any Animation. 它在活动中消失,但如果您了解它的完成方式,您可以应用任何动画。

Fade In Android Launch Activity 淡入Android启动活动

To cancel the standard built in Activity Animations you can use this Intent.FLAG : 要取消活动动画中内置的标准,您可以使用此Intent.FLAG

intent.setFlag(Intent.FLAG_ACTIVITY_NO_ANIMATION);

when you start your Activity. 当你开始你的活动。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM