CircularRevealアニメーションの使用(Android 5.0以上)

4676 ワード

学習サイト:1.高エミュレートクライアントのSearchViewhttps://mp.weixin.qq.com/s/X7l4aVY0Y_yfmec5rF4HCQ 2.CircularRevealアニメーション効果を使用してページを切り替える-CSDNブログhttp://blog.csdn.net/caroline_wendy/article/details/50756717
1.実現する機能:
1.「検索」ボタンをクリックし、検索ビューを半円アニメーションで展開し、入力方法を表示する.[キャンセル](Cancel)をクリックして、検索ビューを半円アニメーションで閉じ、入力方法を非表示にします.2.「広告」の円形ボタンをクリックし、広告ページをジャンプし、円形ボタンにはActivity間の関連アニメーションがあり、画像は円形アニメーションで表示される.「戻る」(ここではAndroidアイコン)をクリックすると、画像が円形アニメーションで消え、「広告」ボタンが元の位置に戻ります.
2.効果図:
CircularReveal动画的使用(Android5.0以上)_第1张图片
3.コアコード
まずAndroid 5かどうかを判断する.0以上であれば、アニメーションが実行され、そうでなければビューが直接表示されます.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            final Animator animator = ViewAnimationUtils.createCircularReveal(
                    layoutSearch, layoutSearch.getWidth() - 56, 23, 0,
                    (float) Math.hypot(layoutSearch.getWidth(), layoutSearch.getHeight())
            );
            animator.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animator) {
                    layoutSearch.setVisibility(View.VISIBLE);
                }

                @Override
                public void onAnimationEnd(Animator animator) {
                    isOpenSearch = true;                    
                }

                @Override
                public void onAnimationCancel(Animator animator) {

                }

                @Override
                public void onAnimationRepeat(Animator animator) {
                }
            });
            animator.setDuration(300);
            animator.start();
        } else {
            layoutSearch.setVisibility(View.VISIBLE); 
            isOpenSearch = true;            
        }

または
int cx = (layoutContainer.getLeft() + layoutContainer.getRight()) / 2;
        int cy = (layoutContainer.getTop() + layoutContainer.getBottom()) / 2;
        int initialRadius = layoutContainer.getWidth();
        float finalRadius = btnAds.getWidth() / 2;        
        Animator anim = ViewAnimationUtils.createCircularReveal(layoutContainer, cx, cy, initialRadius, finalRadius);
        anim.setDuration(300);
        anim.setInterpolator(new AccelerateDecelerateInterpolator());
        anim.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationStart(Animator animation) {
                super.onAnimationStart(animation);               
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                layoutContent.setVisibility(View.GONE);                           
            }
        });
        anim.start();