先上圖:
再附上:原始碼位址
上面的自定義動畫效果,有以下三個關鍵點:
1,背景顏色變化;
2,中心位置風車的旋轉;
3,四周小圈圈,吸收進中心位置;
下面詳細介紹它們實現方式:
實際整體控制動畫的流暢性,是利用屬性動畫輔助的:
manim = valueanimator.ofint(0, 100);
manim.setduration(30 * 1000);
manim.addupdatelistener(new valueanimator.animatorupdatelistener()
});@override
protected
void
ondraw(canvas canvas)
利用屬性動畫,在 onanimationupdate 監聽裡面,invalidate 重走 ondraw 重繪;
背景色變化
manim.addupdatelistener(new valueanimator.animatorupdatelistener()
});@override
protected
void
ondraw(canvas canvas)
mpaint.setshader(mlgradient);
canvas.drawrect(0, 0, getwidth(), getheight(), mpaint);
// 風扇 旋轉
// ...省略**
// 衝擊的 圈圈
// ...省略**
// 底部文案
// ...省略**
}
風車旋轉// ...省略**
mscanbitmap = bitmaputils.getbitmapfromresourcewithhighquality(getcontext().getresources(), r.drawable.manage_icon_scan_fs, 268, 268);
manim.addupdatelistener(new valueanimator.animatorupdatelistener()
});@override
protected
void
ondraw(canvas canvas)
// 衝擊的 圈圈
// ...省略**
// 底部文案
// ...省略**
}
衝擊的圈圈// 隨機生成某個方向的 圈圈
private scoreanimationview.circle obtainnewcircle(int where) else
if (where == 1) else
if (where == 2) else
if (where == 3) else
if (where == 4) else
if (where == 5)
return circle;
}/**
* 新增新的一組圈圈,到螢幕裡;
* mcurrentnexttime 會逐漸變大的,每間隔 next_new_time 的時間,會增加一組圈圈,顯得看著連貫衝擊感;
*/private
void
addnewcircles()
}@override
protected
void
ondraw(canvas canvas) else
}addnewcircles();
mcurrentnexttime += loop_time;
// 底部文案
// ...省略**
}
自定義動畫
在製作自定義動畫時,有以下八個樣式可供選擇 animation name 動畫名稱 元素所應用的動畫名稱,必須與規則 keyframes 配合使用,因為動畫名稱由 keyframes 定義。animation duration 動畫時間 設定物件動畫的持續時間 animation timing fu...
CustomAnim自定義動畫
android只提供了4種基本動畫效果,除了可以疊加效果外,我們還可以進行自定義動畫。mainactivity.class不變 package com.customanim.customanim import android.os.bundle import android.view.view pu...
自定義動畫效果
demotitle charset utf 8 src bootstrap js jquery.min.js script div1 style head animateh2 params,speed easing fn p 用於建立自定義動畫的函式。這個函式的關鍵在於指定動畫形式及結果樣式屬性物件...