android動畫筆記二

    從android3.0,系統提供了一個新的動畫-property animation, 為什么系統會提供這樣一個全新的動畫包呢,先來看看之前的補間動畫都有什么缺陷吧

1、傳統的補間動畫都是固定的編碼,功能是固定的,擴展難度大。比如傳統動畫只能實現移動、縮放、旋轉、淡入淡出,四種效果,如果去改變view的背景,就只能自己去實現。
2、補間動畫只是改變了view的顯示效果,不會真正改變view的屬性,比如一個動畫的點擊時間,view移動到另一個地方,它的監聽事件還在換來的地方。
3、傳統動畫不能對非view的對象進行動畫操作。
這估計就是property animation出現的原因了吧,說了這些來看看android.animation里面都有什么東西吧
animator
ValueAnimator
ValueAnimator是整個動畫機制當中最核心的一個類,屬性動畫中主要的時序引擎,如動畫的時間,開始、結束屬性值,ValueAnimator還負責管理動畫的播放次數,播放模式,以及對動畫設計監聽器。

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);  
anim.setDuration(300);  
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  @Override  public void onAnimationUpdate(ValueAnimator animation) {  float currentValue = (float) animation.getAnimatedValue();  Log.d("TAG", "cuurent value is " + currentValue);  }  
});  
anim.start();

ObjectAnimator
允許你指定要進行動畫的對象以及該對象的一個屬性。該類會根據計算得到的新值自動更新屬性。ValueAnimator是對值進行了一個平滑的動畫過渡,而objectAnimator則可以直接對任意對象的屬性進行動畫操作。
fter(Animator anim) 將現有動畫插入到傳入的動畫之后執行
after(long delay) 將現有動畫延遲指定毫秒后執行
before(Animator anim) 將現有動畫插入到傳入的動畫之前執行
with(Animator anim) 將現有動畫和傳入的動畫同時執行

ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);  
animator.setDuration(5000);  
animator.start();  

AnimatorSet
使動畫組合到一起,并可設置組中動畫的時序關系,如同時播放,有序播放或延遲播放。

ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f);  
ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);  
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);  
AnimatorSet animSet = new AnimatorSet();  
animSet.play(rotate).with(fadeInOut).after(moveIn);  
animSet.setDuration(5000);  
animSet.start();  

Interpolator
先看一下TimeInterpolator接口的定義,

public interface TimeInterpolator {  /** * Maps a value representing the elapsed fraction of an animation to a value that represents * the interpolated fraction. This interpolated value is then multiplied by the change in * value of an animation to derive the animated value at the current elapsed animation time. * * @param input A value between 0 and 1.0 indicating our current point *        in the animation where 0 represents the start and 1.0 represents *        the end * @return The interpolation value. This value can be more than 1.0 for *         interpolators which overshoot their targets, or less than 0 for *         interpolators that undershoot their targets. */  float getInterpolation(float input);  
}  

getInterpolation()方法中接收一個input參數,這個參數的值會隨著動畫的運行而不斷變化,不過它的變化是非常有規律的,就是根據設定的動畫時長勻速增加,變化范圍是0到1。動畫一開始input的值是0, 結束時input的值是1, 而中間值則是隨著動畫運行的時長在0到1之間變化。
ViewPropertyAnimator
為了方便對view的動畫操作,在android3.1補充了ViewPropertyAnimator這個機制。

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
myView.animate().x(50f).y(100f);

為ViewGroup添加布局動畫
可以在ViewGroup內,通過LayoutTransition類為布局的變化添加動畫。
當一個ViewGroup中添加或者移除某一個item,或者調用了View的setVisibility方法,使得View 變得VISIBLE或者GONE的時候,在ViewGroup內部的View可以完成出現或者消失的動畫。當你添加或者移除View的時候,那些剩余的View也可以通過動畫的方式移動到自己的新位置。你可以通過setAnimator()方法并傳遞一個Animator對象,在LayoutTransition內部定義以下動畫。以下是幾種事件類型的常量:

APPEARING        為那些添加到父元素中的元素應用動畫
CHANGE_APPEARING    為那些由于父元素添加了新的item而受影響的item應用動畫
DISAPPEARING       為那些從父布局中消失的item應用動畫
CHANGE_DISAPPEARING  為那些由于某個item從父元素中消失而受影響的item應用動畫

你可以為這四種事件定義自己的交互動畫,或者僅僅告訴動畫系統使用默認的動畫。
API Demos中的LayoutAnimations sample向你展示了如何為布局轉換定義一個布局動畫,然后將該動畫設置到目標View對象上
Keyframes
由一個鍵值對組成,可以為動畫定義某一特定時間的特定狀態。每個keyframe可以擁有自己的插值器,用于控制前一幀和當前幀的時間間隔間內的動畫。第一個參數為:要執行該幀動畫的時間節點(elapsed time / duration),第二個參數為屬性值。

Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(“rotation”, kf0, kf1, kf2);//動畫屬性名,可變參數
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
rotationAnim.setDuration(5000ms);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389191.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

回歸分析檢驗_回歸分析

回歸分析檢驗Regression analysis is a reliable method in statistics to determine whether a certain variable is influenced by certain other(s). The great thing about regression is also that there could be multiple variables influencing the variable of intere…

是什么樣的騷操作讓應用上線節省90%的時間

優秀的程序員 總會想著 如何把花30分鐘才能解決的問題 在5分鐘內就解決完 例如在應用上線這件事上 通常的做法是 構建項目在本地用maven打包 每次需要clean一次,再build一次 部署包在本地ide、git/svn、maven/gradie 及代碼倉庫、鏡像倉庫和云平臺間 來回切換 上傳部…

QQ API

QQ API設計說明書目錄一、引言 31.1 編寫目的 31.2 更新時間 3二、總體設計 3三、注冊的系統消息 33.1 WM_QQAPI_REGISTER 33.2 WM_QQAPI_REGISTER_RESP 43.3 WM_QQAPI_AVAILABLE 4四、從設備到QQ的自定義事件 54.1 EVENT_QQAPI_SET_AUDIODEVICE …

Ubuntu 18.04 下如何配置mysql 及 配置遠程連接

首先是大家都知道的老三套,啥也不說上來就放三個大招: sudo apt-get install mysql-serversudo apt isntall mysql-clientsudo apt install libmysqlclient-dev 這三步下來mysql就裝好了,然后我們偷偷檢查一下 sudo netstat -tap | grep mysq…

數據科學與大數據技術的案例_主數據科學案例研究,招聘經理的觀點

數據科學與大數據技術的案例I’ve been in that situation where I got a bunch of data science case studies from different companies and I had to figure out what the problem was, what to do to solve it and what to focus on. Conversely, I’ve also designed case…

導致View樹遍歷的時機

遍歷View樹意味著整個View需要重新對其包含的子視圖分配大小并重繪,導致重新遍歷的原因主要有三個 1.視圖本身內部狀況變化引起重繪。 2.第二個是View樹內部添加或者刪除了View。 3.View本身的大小及可見性發生變化。 能引起View樹重新遍歷的操作,總…

什么是Hyperledger?Linux如何圍繞英特爾的區塊鏈項目構建開放平臺?

訪問區塊鏈會議并關注區塊鏈新聞時,不可避免地,您會遇到Linux基金會的Hyperledger。理解像比特幣、以太坊這樣的加密貨幣還算相對容易的,Hyperledger卻不然。但如果你多研究研究,你會發現一些令人興奮的非貨幣、工業區塊鏈的應用項…

隊列的鏈式存儲結構及其實現_了解隊列數據結構及其實現

隊列的鏈式存儲結構及其實現A queue is a collection of items whereby its operations work in a FIFO — First In First Out manner. The two primary operations associated with them are enqueue and dequeue.隊列是項目的集合,由此其操作以FIFO(先進先出)的方…

安裝

、添加一個新項目->選擇類庫模板->命名為DBCustomAction 2、單擊項目右鍵->添加新項->選擇安裝程序類(命名為DBCustomAction.cs) 3、在 服務器資源管理器中添加->連接到 數據庫->指定用戶密碼(選擇允許保存密碼)-> 數據庫選擇master 4、切換到DBCustomAct…

cad2016珊瑚_預測有馬的硬珊瑚覆蓋率

cad2016珊瑚What’s the future of the world’s coral reefs?世界珊瑚礁的未來是什么? In February of 2020, scientists at University of Hawaii Manoa released a study addressing this very question. The models they developed forecasted a 70–90% worl…

EChart中使用地圖方式總結(轉載)

EChart中使用地圖方式總結 2018年02月06日 22:18:57 來源:https://blog.csdn.net/shaxiaozilove/article/details/79274772最近在仿照EChart公交線路方向示例,開發表示排水網和污水網流向地圖,同時地圖上需要疊加排放口、污染源、污水處理廠等…

android mvp模式

越來越多人討論mvp模式,mvp在android應用開發中獲得更多的重視,這里說一下對MVP的簡單了解。 什么是 MVP? MVP模式使邏輯從視圖層分開,目的是我們在屏幕上怎么表現,和界面如何工作的所有事情就完全分開了。 View顯示數據&…

Node.js REPL(交互式解釋器)

2019獨角獸企業重金招聘Python工程師標準>>> Node.js REPL(交互式解釋器) Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個電腦的環境,類似 Window 系統的終端或 Unix/Linux shell,我們可以在終端中輸入命令,并接收系統…

中國移動短信網關CMPP3.0 C#源代碼:使用示例

中國移動短信網關CMPP3.0 C#源代碼:使用示例 中國移動短信網關CMPP3.0 C#源代碼使用,在上一篇文章中我介紹過cmpp3.0,這段時間因為也做關于移動短信網關的開發,在這里給大家一個演示如何使用cmpp3.0開發移動短信網關。Using Tiray.SMS... Ti…

用python進行營銷分析_用python進行covid 19分析

用python進行營銷分析Python is a highly powerful general purpose programming language which can be easily learned and provides data scientists a wide variety of tools and packages. Amid this pandemic period, I decided to do an analysis on this novel coronav…

名稱

命名規則:Go中函數、變量、常量、類型、語句標簽和包的名稱都遵循一個規則,開頭是一個字母或下劃線,后面跟任意字符、數字和下劃線,并區分大小寫。例如:heapSort和HeapSort是不同名稱。關鍵字:Go有25個關鍵…

Alpha沖刺第二天

Alpha第二天 1.團隊成員 鄭西坤 031602542 (隊長) 陳俊杰 031602504陳順興 031602505張勝男 031602540廖鈺萍 031602323雷光游 031602319蘇芳锃 0316023302.項目燃盡圖 3.項目進展 時間工作內容11月18日UI設計、初步架構搭建11月19日UI設計、服務器的進一…

Tiray.SMSTiray.SMSTiray.SMSTiray.SMSTiray.SMSTiray.SMS

這是2005年6月云南移動短信網關升級到3.0時寫的,在SP那穩定運行了很長時間的。因為SP倒閉了,貼出來給有興趣的朋友參考。優點:支持多線程、滑動窗口、異步發送、全事件模式、自動識別ASCII、GBK、UCS-2缺點:不支持長短信自動分頁、…

水文分析提取河網_基于圖的河網段地理信息分析排序算法

水文分析提取河網The topic of this article is the application of information technologies in environmental science, namely, in hydrology. Below is a description of the algorithm for ranking rivers and the plugin we implemented for the open-source geographic…

請不要更多的基本情節

“If I see one more basic blue bar plot…”“如果我再看到一個基本的藍色條形圖……” After completing the first module in my studies at Flatiron School NYC, I started playing with plot customizations and design using Seaborn and Matplotlib. Much like doodl…