Lollipop爲咱們帶來很多動畫,簡單而有效,靈活運用提高APP逼格javascript
Activity過渡動畫包含兩部分 : java
fade (淡入淡出) : 經過改變視圖的透明度來添加或者移除視圖android
使用 :
初始Activity:git
startActivity(mIntent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
目標跳轉Activity :github
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
less
getWindow().setExitTransition()
- 當A 跳轉到 B時,使A中的View退出場景的transitionide
getWindow().setEnterTransition()
: 當A 跳轉到 B時,使B中的View進入場景的transitiongetWindow().setReturnTransition()
: 當B 返回到 A時,使B中的View退出場景的transitiongetWindow().setReenterTransition()
: 當B 返回到 A時,使A中的View進入場景的transition上述設置須要在setContentView()
以前設置佈局
一共就是上述三種模式: Explode
、Slide
、 Fade
、動畫
效果如圖:this
changeBounds
: 捕獲共享元素的layout bound,而後播放layout bound變化動畫。ChangeBounds 是共享元素變換中用的最多的,由於先後兩個activity中共享元素的大小和位置通常都是不一樣的。changeClipBounds
: 裁剪目標視圖邊界,捕獲共享元素clip bounds,而後播放clip bounds變化動畫。changeTransform
: 捕獲共享元素的縮放(scale)與旋轉(rotation)屬性 ,而後播放縮放(scale)與旋轉(rotation)屬性變化動畫。changeImageTransform
:捕獲共享元素(ImageView)的transform matrices 屬性,而後播放ImageViewtransform matrices 屬性變化動畫。與ChangeBounds相結合,這個變換可讓ImageView在動畫中高效實現大小,形狀或者ImageView.ScaleType 屬性平滑過分。效果圖:
android:transitionName="one"
裏面的值是本身定的一個標識,可是必須保持兩邊一致getWindow().setSharedElementEnterTransition();
: A->B,B進入動畫getWindow().setSharedElementExitTransition();
: A->B,A退出動畫getWindow().setSharedElementReenterTransition();
: B->A,A進入動畫getWindow().setSharedElementReturnTransition();
: B->A,B退出動畫startActivity(mIntent,
ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create(ivImageI, "one"), // 設置共享的控件和他的Tag 就能夠了
Pair.create(ivImageIi, "two"))
.toBundle());複製代碼
十分簡單在Xml中控件添加
android:background="?android:attr/selectableItemBackground"
android:background="?android:attr/selectableItemBackgroundBorderless"
這個是系統默認的
自定義Ripple一樣簡單,當即上手
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#cb2eff" android:radius="500dp"> <item android:drawable="@color/blue_i"/> </ripple>複製代碼
android:background="@drawable/ripple_red"
其實就是一個圓形路徑繪製。
和Animator的使用基本一致
API解析:
ViewAnimationUtils.createCircularReveal(view, centerX, centerY, startRadius, endRadius);
view
: 動畫的做用目標centerX
: 動畫開始的中心點X座標centerY
: 動畫開始的中心點Y座標startRadius
: 動畫開始時的圓半徑endRadius
: 動畫結束時的圓的半徑兩種應用:
//設置頂佈局過渡動畫
llRoot.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);
Animator circularReveal = ViewAnimationUtils.createCircularReveal(
llRoot,
llRoot.getWidth() / 2,
llRoot.getHeight() / 2,
50,
1000);
circularReveal.setInterpolator(new AccelerateDecelerateInterpolator());
circularReveal.setDuration(1000);
circularReveal.start();
}
});
// 控件設置點擊動畫效果
ivImageI.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//實現從左上角開始的扇形展開動畫
Animator circularReveal = ViewAnimationUtils.createCircularReveal(
ivImageI,
0,
0,
0,
ivImageI.getWidth()+159);
circularReveal.setInterpolator(new AccelerateDecelerateInterpolator());
circularReveal.setDuration(1000);
circularReveal.start();
}
});複製代碼
效果圖:
Lollipop 中添加的動畫效果仍是十分不錯的,並且使用也是十分簡單高效
將有需求的動畫效果封裝在本身的基類文件中使用起來就更加順暢了若是覺有有用,能夠點贊鼓勵一下哈O(∩_∩)O~~
附上:代碼Github