1、動畫基礎
從圖像到圖像的平滑過渡是非常重要的。用戶不喜歡在應用中出現突然的轉變。這就是 Glide 要做的。Glide 中有一個標準動畫去柔軟的在你的 UI 中改變。我們在之前的博客 看了 .crossFade()。
但是這篇博客,我們要去看看除了 .crossFade() 的其他選擇。Glide 提供了兩個選項去設置一個動畫。兩個版本都是在 animate() 中,但傳的參數並不同。
在我們之前代碼,我們指出,動畫僅僅用於不從緩存中加載的情況。如果圖片被緩存過了,它的顯示是非常快的,因此動畫是沒有必要的,並且不顯示的。
從資源中的動畫
回到代碼,第一個選項是傳一個 Android 資源 id,即動畫的資源。一個簡單的例子是每個 Android 系統都提供的:slide-in-left(從左滑入)動畫,android.R.anim.slide_in_left。下面這段代碼是這個動畫的 XML 描述:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
當然你可以創建你自己的 XML 動畫。比如一個小的縮放動畫,圖片剛開始小的,然後逐漸增大到原尺寸。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
android:duration="@android:integer/config_longAnimTime"
android:fromXScale="0.1"
android:fromYScale="0.1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1"
android:toYScale="1"/>
</set>
這兩個動畫都可以用到 Glide 建造者中:
Glide
.with( context )
.load( eatFoodyImages[0] )
.animate( android.R.anim.slide_in_left ) // or R.anim.zoom_in
.into( imageView1 );
在圖片從網絡加載完並準備好之後將從左邊滑入。
通過自定義類實現動畫
當你想加載到常規的 ImageView 中這是沒問題的。但是如果 target 是一些自定義的呢,比如我們之前在這篇博客 裏所談論過的?所以另外一個選項就非常有用了。通過傳遞一個動畫資源的引用,你實現的一個類有 ViewPropertyAnimation.Animator 接口。
這個很簡單,你只需實現 void animate(View view) 方法。這個視圖對象是整個 target 視圖。如果它是一個自定義的視圖,你要找到你的視圖的子元素,並且做些必要的動畫。
來看個簡單的例子。假設你想要實現一個漸現動畫,你得需要創建這樣的動畫對象:
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
// if it's a custom view class, cast it here
// then find subviews and do the animations
// here, we just use the entire view for the fade animation
view.setAlpha( 0f );
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
fadeAnim.setDuration( 2500 );
fadeAnim.start();
}
};
接下來,你需要在 Glide 請求中去設置這個動畫:
Glide
.with( context )
.load( eatFoodyImages[1] )
.animate( animationObject )
.into( imageView2 );
當然,在 animate(View view) 中你的動畫對象方法中, 你可以做任何你想要對視圖做的事情。自由的用你的動畫創建吧。
如果你要在你的自定義視圖中實現,你只需要創建這個視圖對象,然後在你的自定義視圖中創建你的自定義方法。