編輯:關於Android編程
Property Animation中最重要,最基礎的一個類就是ValueAnimator了。Property Animation利用ValueAnimator來跟蹤記錄對象屬性已經變化了多長時間及當前這個時間點的值。
而在ValueAnimator中,又封裝了兩個類:
1)TimeInterpolator,也稱插值器,是來計算當前動畫運動的一個跟時間有關系的比例因子。
2)TypeEvaluator,這個就是利用TimeInterpolator計算出來的因子來算出當前動畫運行到的位置。
這樣講太抽象了,我們還是先用自然語言來描述一下整個動畫的過程吧。
動畫的原理,其實就是一幀幀的畫面順著時間順序,在我們眼中形成視覺殘留的效果。所以在動畫中,時間的概念是很重要的,只有時間的變化,才能形成動畫效果。
0)動畫准備開始,我們在這裡設置了一個動畫的時長(duration),如果不設置的話,動畫的時長就是300毫秒,每個畫面顯示的時間是10ms。同時也設置了某個屬性值在這個時間段中變化的起始值start和結束值end,意思就是說,在duration時間中,屬性值要從start 變化到 end。
1)動畫開始了,過了 t 時間,ValueAnimator會根據 t / duration 算出一個時間消逝的比例因子(elapsed fraction),意思就是說,現在時間到 t了,我們假設總的時間的duration就是3t吧,那就是現在已經過了1/3時間了,那這個屬性值也應該要變化到1/3了。
2)動畫繼續,現在到了2t了,那麼現在動畫時間已經過了2/3了,那麼這個屬性值是不是已經變化到2/3了呢。
3)現在到了3t了,動畫結束了,屬性值就已經從start變成end值了。
那麼現在問題來了,如果都是這樣算的話,那動畫不就一直是很勻速的了嗎?是的,如果用的是LinearInterpolator的話。
public float getInterpolation(float input) { return input; }而 AccelerateDecelerateInterpolator 則會利用余弦函數的對稱性變化計算這個比例因子,如下:
public float getInterpolation(float input) { return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f; }
class BezierEvaluator implements TypeEvaluator{ @Override public PointF evaluate(float fraction, PointF startValue, PointF endValue) { final float t = fraction; float oneMinusT = 1.0f - t; PointF point = new PointF(); PointF point0 = (PointF)startValue; PointF point1 = new PointF(); point1.set(width, 0); PointF point2 = new PointF(); point2.set(0, height); PointF point3 = (PointF)endValue; point.x = oneMinusT * oneMinusT * oneMinusT * (point0.x) + 3 * oneMinusT * oneMinusT * t * (point1.x) + 3 * oneMinusT * t * t * (point2.x) + t * t * t * (point3.x); point.y = oneMinusT * oneMinusT * oneMinusT * (point0.y) + 3 * oneMinusT * oneMinusT * t * (point1.y) + 3 * oneMinusT * t * t * (point2.y) + t * t * t * (point3.y); return point; } }
valueAnimator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { PointF pointF = (PointF)animation.getAnimatedValue(); button.setX(pointF.x); button.setY(pointF.y); } });
效果圖: 有時候我們需要去做一個Activity啟動時的數據加載對話框,關於對話框的各種實現可以通過一起學android之對話框 Dial
最近項目要使用到串口通訊,在搭載android系統的主板上監聽COM口的數據,這塊之前沒接觸過,我搜索了一下找到一個開源項目:android-serialport-api
0x00 序隨著移動安全越來越火,各種調試工具也都層出不窮,但因為環境和需求的不同,並沒有工具是萬能的。另外工具是死的,人是活的,如果能搞懂工具的原理再結合上自身的經驗,
隨著手機的普及,移動電源也開始火起來了,非常的方便,出門沒電必備,能先將電充進移動電源裡,儲存在裡面,等手機沒電再用移動電源給手機充電。那麼小編現在就給大家