MaterialDesign動畫

1.Touch Feedback(觸摸反饋)
例子:水波紋效果
水波紋效果是5.0+自帶的。

<Button
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:text="@string/hello_world" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:background="?attr/selectableItemBackground"
        android:text="@string/hello_world" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:background="?attr/selectableItemBackgroundBorderless"//沒有邊界,圓形
        android:text="@string/hello_world" />

可以修改背景顏色和水波紋的顏色:

     <item name="colorControlHighlight">@color/colorPrimary_pink</item>//高亮顏色
        <item name="colorButtonNormal">@color/material_blue_grey_800</item>//默認的顏色

最好使用AppcompatActivity
注意:如果是Button設置背景,原來的背景會被替換了。其他的控件可以設置背景。

2.Reveal Effect(揭露效果)
例子:Activity的揭露出現的效果。
ViewAnimationUtil工具類

// 圓形水波紋揭露效果
// ViewAnimationUtils.createCircularReveal(
// view, //作用在哪個View上面
// centerX, centerY, //擴散的中心點
// startRadius, //開始擴散初始半徑
// endRadius)//擴散結束半徑
Animator animator = ViewAnimationUtils.createCircularReveal(
                        bt1, bt1.getWidth() / 2, bt1.getHeight() / 2, 0,bt1.getHeight());
animator.setDuration(1000);
animator.setInterpolator(new AccelerateInterpolator());
animator.start();

3.Activity transition(Activity轉場動畫效果)

這裏寫圖片描述

概念:
兩個Activity進行跳轉的時候,轉場動畫。
ActivityOptions類。只支持API21以上的版本。
版本判斷會比較麻煩,谷歌很貼心 設計了一個兼容類:ActivityOptionsCompat(v4包中)但是此類在低版本上面並沒有轉場動畫效果,只是解決了我們手動去判斷版本的問題而已。

分類
轉場動畫可以分爲兩大類:共享元素轉換和普通的轉換

使用轉換動畫前提:需要給兩個Activity都設置如下,讓其允許使用轉場動畫。
方法一:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

方法二,修改主題:

<item name="android:windowContentTransitions">true</item>

1.共享元素轉換
概念:可以把兩個Activity當中的相同的元素關聯起來做連貫的變換動畫。
第一步:
給兩個Activity當中的共享元素view都設置同一個名字:android:transitionName

<ImageView
        android:id="@+id/iv_header"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/song"
        android:transitionName="iv_header" />

按返回鍵的時候自動實現了返回的共享元素轉場動畫,原因看源碼:

    public void onBackPressed() {
            finishAfterTransition();
        }
        public void finishAfterTransition() {
            if (!mActivityTransitionState.startExitBackTransition(this)) {
                finish();
            }
        }

第二步:通過ActivityOptionsCompat啓動Activity:
(1)單個元素共享

//               ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
//               .makeSceneTransitionAnimation(
//               activity, //當前的Activity
//               sharedElement,//共享元素---哪一個View
//               sharedElementName)//共享元素的名稱
//               android:transitionName="iv_meinv3"

                ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
                        .makeSceneTransitionAnimation(MDanimationActivity.this,
                                v, "iv_meinv3");
                Intent intent = new Intent(MDanimationActivity.this,
                        MDanimationBActivity.class);
                startActivity(intent, optionsCompat.toBundle());

(2)多個共享元素

        //如何處理多個共享元素呢?
//      new Pair<>(first, second)
        ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
                .makeSceneTransitionAnimation(this, Pair.create((View)iv1, "iv1"),Pair.create((View)bt, "bt"));
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent, optionsCompat.toBundle());

2.普通的轉換動畫(只有API 21纔有下面自帶效果)
三種系統帶的:滑動效果(Slide)、展開效果Explode、漸變顯示隱藏效果Fade

//      Slide slide = new Slide();
//      slide.setDuration(300);
//      getWindow().setExitTransition(slide);//出去的動畫
//      getWindow().setEnterTransition(slide);//進來的動畫

//      Explode explode = new Explode();
//      explode.setDuration(1000);
//      getWindow().setExitTransition(explode);//出去的動畫
//      getWindow().setEnterTransition(explode);//進來的動畫

        Fade fade = new Fade();
        fade.setDuration(1000);
        getWindow().setExitTransition(fade);//出去的動畫
        getWindow().setEnterTransition(fade);//進來的動畫
        //如果有共享元素,可以設置共享元素,那麼它就會按照共享元素動畫執行,其他的子view就會按照Fade動畫執行。
        ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this);
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent, optionsCompat.toBundle());

4.Curved motion(曲線運動)
設計:view的平移旋轉等效果結合Path、Interpolator插值器。

5.View State change (視圖的狀態改變)
例子:按下一個控件會有Z軸的陰影加深效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章