界面動畫的循環(huán)展示

動畫在某點向外擴散效果。
首先下如下代碼:

private Animator animateRevealColorFromCoordinates(ViewGroup viewRoot, @ColorRes int color, int x, int y) {
        float finalRadius = (float) Math.hypot(viewRoot.getWidth(), viewRoot.getHeight());

        Animator anim = ViewAnimationUtils.createCircularReveal(viewRoot, x, y, 0, finalRadius);
        viewRoot.setBackgroundColor(ContextCompat.getColor(this, color));
        anim.setDuration(500);
        anim.setInterpolator(new AccelerateDecelerateInterpolator());
        anim.start();
        return anim;
    }

viewRoot界面布局,color為顏色,x,y為擴散點
如需要在界面中間擴散,代碼如下:

   private void animateRevealColor(ViewGroup viewRoot, @ColorRes int color) {
        int cx = (viewRoot.getLeft() + viewRoot.getRight()) / 2;
        int cy = (viewRoot.getTop() + viewRoot.getBottom()) / 2;
        animateRevealColorFromCoordinates(viewRoot, color, cx, cy);
    }

接下來,我們在它擴散前加入提升效果,代碼如下:

private void revealRed(final ViewGroup viewRoot, final ImageView ivRed) {
        // 保存最開始的狀態(tài)的參數(shù)
        final ViewGroup.LayoutParams saveParams = ivRed.getLayoutParams();
        Transition transition = TransitionInflater.from(this).inflateTransition(R.transition
                .changebounds_with_arcmotion);
        transition.addListener(new Transition.TransitionListener() {
            @Override
            public void onTransitionStart(Transition transition) {

            }


            @Override
            public void onTransitionEnd(Transition transition) {
                animateRevealColor(viewRoot, R.color.red);
                // 動畫結(jié)束之后,將 紅圈再設(shè)回以前的參數(shù)
                ivRed.setLayoutParams(saveParams);
            }


            @Override
            public void onTransitionCancel(Transition transition) {

            }


            @Override
            public void onTransitionPause(Transition transition) {

            }


            @Override
            public void onTransitionResume(Transition transition) {

            }
        });
        // 保存 每個 View 當前的可見狀態(tài)(Visibility)。很重要,它會時兩個狀態(tài)的控件中間出現(xiàn)動畫效果
        TransitionManager.beginDelayedTransition(viewRoot, transition);

        // 移動紅圈到中央
        RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(5, 5);
        layoutParams1.addRule(RelativeLayout.CENTER_IN_PARENT);
        ivRed.setLayoutParams(layoutParams1);
    }

如果想在點擊處向外擴散,代碼如下:

findViewById(R.id.square_yellow).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    if (v.getId() == R.id.square_yellow) {
                        revealYellow(event.getRawX(), event.getRawY());
                    }
                }
                return false;
            }
        });

    private void revealYellow(float x, float y) {
        animateRevealColorFromCoordinates(root, R.color.yellow, (int) x, (int) y);
    }

再來看下面一個有趣的動畫,將以控件內(nèi)的所有組件循環(huán)展示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/reveal_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/square_green"
        android:layout_alignParentBottom="true"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginRight="10dp"
        android:alpha="0"
        android:scaleX="0.5"
        android:scaleY="0.5"
        android:background="@color/theme_green_primary"/>

    <ImageView
        android:id="@+id/square_red"
        android:layout_alignParentBottom="true"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginRight="10dp"
        android:alpha="0"
        android:scaleX="0.5"
        android:scaleY="0.5"
        android:layout_toRightOf="@id/square_green"
        android:background="@color/theme_red_primary"/>
    <ImageView
        android:id="@+id/square_yellow"
        android:layout_alignParentBottom="true"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginRight="10dp"
        android:alpha="0"
        android:scaleX="0.5"
        android:scaleY="0.5"
        android:layout_toRightOf="@id/square_red"
        android:background="@color/theme_yellow_primary"/>
    <ImageView
        android:id="@+id/square_blue"
        android:layout_alignParentBottom="true"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:alpha="0"
        android:scaleX="0.5"
        android:scaleY="0.5"
        android:layout_toRightOf="@id/square_yellow"
        android:background="@color/theme_blue_primary"/>

</RelativeLayout>
private void animateButtonsIn() {
        for (int i = 0; i < root.getChildCount(); i++) {
            View view = root.getChildAt(i);
            view.animate().setStartDelay(100 + i * DELAY).setInterpolator(interpolator).alpha(1).scaleX(1).scaleY(1);
        }
    }

頂部中簡擴散后,imageview循環(huán)展示
private void revealBlue() {
        animateButtonsOut();//  先讓底部四個圓圈消失

        Animator animator = animateRevealColorFromCoordinates(root, R.color.blue, root.getWidth() / 2, 0);
        animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                // 動畫結(jié)束之后,讓底部四個圓圈進入
                animateButtonsIn();
            }
        });
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,173評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,425評論 4 61
  • 日子飛快,處于種種機緣巧合,讓我加到了feat的微信,好像是之乎上關(guān)于雕爺?shù)脑u論吧,同為傳業(yè)者被他的精神所打動,同...
    3e85892c3ebd閱讀 400評論 0 1
  • “同學(xué)你什么專業(yè)?” “法學(xué)” “以后什么職業(yè)” “法師” 你呢
    伊芙小鎮(zhèn)閱讀 280評論 0 0
  • 倩影銷,客還立斷橋;紙傘薄,觀云慘天高.醉歿西郊,吾吹簫,欲揮毫.清明哀悼,祭一世孤傲,淚把燭火搖;流年輪回,葳蕤...
    松寶寶6493546閱讀 175評論 0 1

友情鏈接更多精彩內(nèi)容