之前發了乙個drawable實現動畫效果的帖子,有人找我要過相應圓弧繪製演算法,仔細想想那個專案中有些地方還是值得分享出來的,趁現在專案不忙,就準備分享出來。效果如下(即activity-a 進入 到activity-b時會出現的動畫效果如上):只有一些演算法的東西,**不涉及具體業務
主要由兩個動畫組成,背景動畫和按鈕動畫
背景動畫
按鈕動畫
1.translateanimation的使用?
2.canvas 繪製圓弧?
/**
**@param canvas 繪製橢圓
*/private
void
drawoval(canvas canvas)
3.canvas 疊加模式?4.bitmapshader的使用?
shader是著色器,bitmapshader是bitmap著色器,可以將乙個bitmap物件繪製到畫布上.5.阻尼振動函式如何實現?
阻尼振動曲線如下圖因為主要是背景動畫和按鈕動畫,所以也拆成兩部分其實分析曲線後就能發現 其實就是指數函式(無限趨近於0)和 余弦曲線的結合而已。
背景動畫的實現
動畫過程分析
位移動畫可以不表,因為很簡單,以一種速率 最多加乙個速度疊加器即可動畫過程實現橢圓可以看到先是移出時橢圓向下最大,然後慢慢縮小,最後在位移到 整體 1/2處橢圓為0,然後又向螢幕上方鼓出,慢慢增大,到 位移到最大位置時橢圓最大
到最大位移位置後,圓弧以阻尼振動慢慢縮小,及至橢圓為0
1. 建立位移動畫
同時建立出 0f - 1.0f 的時間插值
/**
**@return 得到上移動畫
*/private animationset getanimationset()
};animationset.addanimation(translateanimation);
return animationset;
}
2. 建立繪製弧線向下的弧線可以理解為一塊正方形和橢圓重疊,當繪製上/下半橢圓以及正確的混合模式即可得到乙個正確的圓弧
// 混合模式為
即當時間插值 為 0f - 0.5f的時候,控制橢圓所在矩形高度由大減小到0,同時繪製橢圓下半部
當時間插值為 0.5f - 1.0f的時候,控制橢圓所在矩形高度由0增大到最大,同時繪製橢圓上半部
當到1.0f時,根據阻尼振動函式 計算出遞增插值下 包含橢圓 矩形的高度繪製半部橢圓即可
/**
* 設定時間插值,並根據插值計算橢圓所在矩形高度,從而得到不同的橢圓弧度
*@param value
*/public
void
setpercent(float value) else
}invalidateself();
}
/**
* // 當到1.0f時,開始繪製阻尼振動畫
*/private
void
startbackanimation()
/**
* todo: 15/12/8 要修改為弱引用
*/private handler handler = new handler() else }};
/**
* 根據cursor插值,計算 阻尼 y實時座標
*@param x
*@return 阻尼振動函式
*/private
double
getbouncey(long x)
// 增益函式和余弦曲線合併,就是阻尼函式曲線
return bouncerate * math.cos(0.3 * x);
}
到這裡,繪製背景動畫關鍵**已經完畢
按鈕動畫的實現
動畫過程分析
可以看到是一張舊上,新的逐漸擴大,發現其實是兩個動畫的集合 ,乙個是新的不停變大(保持圓形),第二個是新的圓心座標有變化
更深一步分析是新在 時間插值 0f-1f,半徑從0-最大,圓心從 3/4處,變為最後1/2處
動畫過程實現
時間插值可以用之前建立出來的
如果你已經看過了並指導 bitmapshader是幹什麼的那麼應該已經有了思路了吧?
/**
* 構造引數
**@param bitmap 新的
*@param oldbitmap 舊
*/public
ripplebuttondrawable(bitmap bitmap, bitmap oldbitmap)
@override
public
void
draw(canvas canvas)
就這樣就好了,是不是很簡單???
有更多的問題可以聯絡我
ListView阻尼效果
效果圖省略。activity main.xml 僅僅有乙個自己定義listview mainactivity arraylistadapter 為了簡化 package com.example.dampingdemo import android.os.bundle import android.w...
android動畫效果
這兩天接觸到一些android特效,例如抖動,平移,轉動等等。標籤可以定義一些動畫效果,可以寫乙個anim的xml來定義動畫的屬性。以下是一些常見的android動畫屬性 平移動畫 duration 持續時間 fromxdelta 屬性為動畫起始時 x座標上的位置 toxdelta 屬性為動畫結束時...
android 動畫效果
animations 一 animations 介紹animations 是乙個實現 android ui 介面動畫效果的 api,animations 提供了一系列的動畫效果,可以進行旋轉 縮放 淡入淡出等,這些效果可以應用在絕大多數的控制項中。二 animations 的分類animations...