最近在看Drakeet的博客的時(shí)候,看到一篇不錯(cuò)的文章倦踢,介紹的是一種呼吸燈的生成送滞。看了代碼后硼一,頓時(shí)覺(jué)得這種思路挺不錯(cuò)的累澡,雖然實(shí)現(xiàn)方式很普通,但是能實(shí)現(xiàn)這種樣式般贼,能體現(xiàn)了圖像算法的魅力所在愧哟。先看下實(shí)現(xiàn)的樣本圖吧:
simple.gif
大家看到樣本圖后,首先覺(jué)得是文本框的背景色一直發(fā)生變化的呢哼蛆。對(duì)的蕊梧,這里的顏色值是一直不斷發(fā)生變化來(lái)實(shí)現(xiàn)的,其實(shí)也不是顏色值發(fā)生變化的腮介,只是改變顏色值的alpha值而已肥矢,下面來(lái)看看這個(gè)alpha是遵循什么圖像變化的吧:
圖像.png
函數(shù).png
其實(shí)這里的apha值就是按照上面那個(gè)拋物線的軌跡來(lái)發(fā)生改變的,
大家可以去代碼中看到有該函數(shù)的實(shí)現(xiàn):
private static double getBreathingY(long time, int n, int t) {
float k = 1.0f / 3;
float pi = 3.1415f;
float x = time / 1000.0f;
t = (int) (t / 1000.0f);
if (x >= ((n - 1) * t) && x < ((n - (1 - k)) * t)) {
double i = pi / (k * t) * ((x - (0.5f * k * t)) - (n - 1) * t);
return 0.5f * Math.sin(i) + 0.5f;
} else if (x >= ((n - (1 - k)) * t) && x < n * t) {
double j = pi / ((1 - k) * t) * ((x - (0.5f * (3 - k) * t)) - (n - 1) * t);
double one = 0.5f * Math.sin(j) + 0.5f;
return one * one;
}
return 0;
}
理解了這個(gè)函數(shù)的實(shí)現(xiàn),基本上就get所有的點(diǎn)了甘改,其實(shí)也沒(méi)什么好說(shuō)的了旅东,其余的動(dòng)畫(huà)實(shí)現(xiàn)也是android基本動(dòng)畫(huà)實(shí)現(xiàn)。大家可以直接去看看代碼是如何實(shí)現(xiàn)的吧十艾。
關(guān)于我
email: a1002326270@163.com
github: enter