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軸的陰影加深效果。