ObjectAnimator之PropertyValuesHolder與Keyframe----實現電話響鈴震動和小球自由拋體效果
2.小球自由拋體效果
一、PropertyValuesHolder
1、概述
PropertyValuesHolder這個類的意義就是,它其中儲存了動畫過程中所需要操作的屬性和對應的值。我們通過ofFloat(Object target, String propertyName, float… values)構造的動畫,ofFloat()的內部實現其實就是將傳進來的引數封裝成PropertyValuesHolder例項來儲存動畫狀態。在封裝成PropertyValuesHolder例項以後,後期的各種操作也是以PropertyValuesHolder為主的。
說到這裡,大家就知道這個PropertyValuesHolder是有多有用了吧,上面我們也說了,ObjectAnimator給我們提供了一個口子,讓我們自己構造PropertyValuesHolder來構造動畫。
- publicstatic ObjectAnimator ofPropertyValuesHolder(Object target,PropertyValuesHolder... values)
高api的函式我們就不講了,只講講api 11的函式的用法。有關各個函式的api等級,大家可以參考《Google文件:PropertyValuesHolder》
首先,我們來看看建立例項的函式:
-
publicstatic PropertyValuesHolder ofFloat(String propertyName,
- publicstatic PropertyValuesHolder ofInt(String propertyName, int... values)
- publicstatic PropertyValuesHolder ofObject(String propertyName, TypeEvaluator evaluator,Object... values)
- publicstatic PropertyValuesHolder ofKeyframe(String propertyName, Keyframe... values)
2、PropertyValuesHolder之ofFloat()、ofInt()
(1)ofFloat()、ofInt()
我們先來看看它們的建構函式:- publicstatic PropertyValuesHolder ofFloat(String propertyName, float... values)
- publicstatic PropertyValuesHolder ofInt(String propertyName, int... values)
- propertyName:表示ObjectAnimator需要操作的屬性名。即ObjectAnimator需要通過反射查詢對應屬性的setProperty()函式的那個property.
- values:屬性所對應的引數,同樣是可變長引數,可以指定多個,還記得我們在ObjectAnimator中講過,如果只指定了一個,那麼ObjectAnimator會通過查詢getProperty()方法來獲得初始值。
- 讓我們看一下ObjectAnimator的ofFloat是怎麼樣的:
- publicstatic ObjectAnimator ofFloat(Object target, String propertyName, float... values);
好了,我們在講完PropertyValuesHolder的ofFloat函式以後,我們再來看看如何將構造的PropertyValuesHolder例項設定進ObjectAnimator吧。
(2)、ObjectAnimator.ofPropertyValuesHolder()
在開篇時,我們也講了ObjectAnimator給我們提供了一個設定PropertyValuesHolder例項的入口:- publicstatic ObjectAnimator ofPropertyValuesHolder(Object target,PropertyValuesHolder... values)
- target:指需要執行動畫的控制元件
- values:是一個可變長引數,可以傳進去多個PropertyValuesHolder例項,由於每個PropertyValuesHolder例項都會針對一個屬性做動畫,所以如果傳進去多個PropertyValuesHolder例項,將會對控制元件的多個屬性同時做動畫操作。
(3)、示例
下面我們就舉個例子來如何通過PropertyValuesHolder的ofFloat、ofInt來做動畫的。效果圖如下:
這個動畫很簡單,就是在點選按鈕的時候,給textView做動畫,框架程式碼就不再講了,我們主要來看看操作textview動畫的程式碼。
動畫程式碼為:
- PropertyValuesHolder rotationHolder = PropertyValuesHolder.ofFloat("Rotation", 60f, -60f, 40f, -40f, -20f, 20f, 10f, -10f, 0f);
- PropertyValuesHolder colorHolder = PropertyValuesHolder.ofInt("BackgroundColor", 0xffffffff, 0xffff00ff, 0xffffff00, 0xffffffff);
- ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(mTextView, rotationHolder, colorHolder);
- animator.setDuration(3000);
- animator.setInterpolator(new AccelerateInterpolator());
- animator.start();
- PropertyValuesHolder rotationHolder = PropertyValuesHolder.ofFloat("Rotation", 60f, -60f, 40f, -40f, -20f, 20f, 10f, -10f, 0f);
第二是動畫是改變背景色的colorHolder
- PropertyValuesHolder colorHolder = PropertyValuesHolder.ofInt("BackgroundColor", 0xffffffff, 0xffff00ff, 0xffffff00, 0xffffffff);
最後通過ObjectAnimator.ofPropertyValuesHolder將rotationHolder、colorHolder設定給mTextView,構造出ObjectAnimator物件。然後開始動畫即可
- ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(mTextView, rotationHolder, colorHolder);
- animator.setDuration(3000);
- animator.setInterpolator(new AccelerateInterpolator());
- animator.start();
原始碼在文章底部給出
3、PropertyValuesHolder之ofObject()
(1)、概述
我們先來看一下ofObject的建構函式- publicstatic PropertyValuesHolder ofObject(String propertyName, TypeEvaluator evaluator,Object... values)
- propertyName:ObjectAnimator動畫操作的屬性名;
- evaluator:Evaluator例項,Evaluator是將當前動畫進度計算出當前值的類,可以使用系統自帶的IntEvaluator、FloatEvaluator也可以自定義,有關Evaluator的知識,大家可以參考《Animation動畫詳解(五)——ValueAnimator高階進階(一)》
- values:可變長引數,表示操作動畫屬性的值
- publicstatic ObjectAnimator ofObject(Object target, String propertyName,TypeEvaluator evaluator, Object... values)
(2)、示例
下面我們就講講PropertyValuesHolder.ofObject()函式的用法本示例的效果圖如下:
這裡實現的效果通過自字義的CharEvaluator來自動實現字母的改變與計算。
首先是自定義一個CharEvaluator,通過進度值來自動計算出當前的字母:
- publicclass CharEvaluator implements TypeEvaluator<Character> {
- @Override
- public Character evaluate(float fraction, Character startValue, Character endValue) {
- int startInt = (int)startValue;
- int endInt = (int)endValue;
- int curInt = (int)(startInt + fraction *(endInt - startInt));
- char result = (char)curInt;
- return result;
- }
- }
從CharEvaluator中可以看出,從CharEvaluator中產出的動畫中間值型別為Character型別。TextView中雖然有setText(CharSequence text) 函式,但這個函式的引數型別是CharSequence,而不是Character型別。所以我們要自定義一個類派生自TextView來改變TextView的字元
- publicclass MyTextView extends TextView {
- public MyTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- publicvoid setCharText(Character character){
- setText(String.valueOf(character));
- }
- }
最後MyActivity,在點選按鈕的時候開始動畫,核心程式碼為:
- publicclass MyActivity extends Activity {
- private Button btn;
- private TextView mTextView;
- private MyTextView mMyTv;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mMyTv = (MyTextView)findViewById(R.id.mytv);
- btn = (Button) findViewById(R.id.btn);
- btn.setOnClickListener(new View.OnClickListener() {
- @Override
- publicvoid onClick(View v) {
- doOfObjectAnim();
- }
- });
- }
- privatevoid doOfObjectAnim(){
-
PropertyValuesHolder charHolder = PropertyValuesHolder.ofObject("CharText",new CharEvaluator(),new Character('A'),new Character(
相關推薦
ObjectAnimator之PropertyValuesHolder與Keyframe----實現電話響鈴震動和小球自由拋體效果
首先需要實現的倆種效果圖 1.實現電話響鈴震動效果 2.小球自由拋體效果 一、PropertyValuesHolder 1、概述 PropertyV
Nginx 服務器 之Nginx與tomcat實現負載均衡
nobody 服務器 listen server events 本文講解我們如何使用Nginx做反向帶服務器,實現nginx與tomcat服務器集群做負載均衡。一、nginx與tomcat實現負載均衡1、在/usr/local/ngnix/conf 創建文件 nginx-tomcat.
android.animation(5) - PropertyValuesHolder與Keyframe(轉)
狀態 一個 通過 返回值 成對 1.0 內部實現 分代 tail 前幾篇給大家講了ValueAnimator、ObjectAnimator的知識,講解了它們ofInt(),ofFloat(),ofObject()函數的用法。細心的同學可能會註意到,ValueAnima
Web前端攻城獅培養計劃之HTML5與CSS3實現動態網頁
整體 script 靜態 觸發 我們 發展方向 web前端 事件 會有 步驟1: 初識HTML5本階段內容主要涵蓋HTML5新增、刪除標簽、標簽屬性變化以及HTML5布局知識。通過本階段學習,大家可以運用HTML5標簽輕松實現網頁音樂播放器和視頻播放器,熟練運用HTML5的
SpringMVC 檔案下載之 --- IO與NIO實現及其效能比較
我的Controller類:FileController.javapackage aboo.controller; import aboo.bean.FileInfo; import aboo.service.FileService; import io.swagger.annotations.Api; i
Python-GUI程式設計之 Tkinter 與 記事本實現心得
在這裡介紹一下tkinter和我的記事本,同時分享一些方便自學python的網站 引用一句老外的話讓自己顯得高大上一些: MythDebunking: TkInter is ugly on Windows (http://wiki.tcl.tk/864
Android之shape與selector實現圓角
shape和selector是Android UI設計中經常用到的,比如我們要自定義一個圓角Button,點選Button有些效果的變化,就要用到shape和selector。可以這樣說,shape和selector在美化控制元件中的作用是至關重要的。 1.Shape
Python之日期與時間處理模組(date和datetime)
本節內容 前言 相關術語的解釋 時間的表現形式 time模組 datetime模組 時間格式碼 總結 前言 在開發工作中,我們經常需要用到日期與時間,如: 作為日誌資訊的內容輸出 計算某個功能的執行時間 用日期命名一個日誌檔案的名稱 記錄或展示某文章的釋出或修改
apicloud與vue實現app首頁和頁面跳轉
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="maximum-scale=1.0,m
菜鳥學習shiro之用配置檔案實現登入,身份和許可權驗證2
Maven的和第一篇,一樣直接去複製使用 這篇部落格和上一篇沒有多大的區別,區別之處就是上一篇沒有實現許可權認證,將在這一篇中實現,這裡我們使用四郎給我們提供的內建類IniRealm,來實現登入,身份
Unity3D之Unity用Display實現Game檢視多屏(分屏)效果
之前見過很多分屏的賽車遊戲,中間螢幕顯示正前方的畫面,兩邊螢幕顯示車窗和後視鏡畫面,一直不知道怎麼實現的,後來在做專案的時候也用到了這樣的技術,所以就去網上搜了一下,結果實現起來非常簡單。首先要先設定好不同的相機來渲染不同的視角,然後在每個相機上有一個TargetDispla
[轉]opencv3 圖像處理 之 圖像縮放( python與c++實現 )
space original 註意 libs 波紋 輸出 uil iostream 3.5 轉自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函數介紹 1) 圖像大小變換 cvResize () 原型: void
mini2440裸機試煉之——Uart與pc端實現文件、字符傳輸
調試工具 CP lib 開發 ons htm sub 設置 沒有 1、? 波特率(Baud rate)即調制速率,1波特即指每秒傳輸1個符號。 2、? 非FIFO模
實現動畫之CSS與JavaScript對比
運行時 理解 controls 進行 中間 PE osi 聰明人 為什麽 曾經某個時期,大多數開發者使用 jQuery 給瀏覽器中的元素添加動畫。讓這個淡化,讓那個擴大,很簡單。隨著互動的項目越來越復雜,移動設備的大量增加,表現性能變得越來越重要。Flash 被拋棄,有天賦
iOS開發之OC與swift開發混編教程,代理的相互呼叫,block的實現。OC呼叫Swift中的代理, OC呼叫Swift中的Block 閉包
本文章將從兩個方向分別介紹 OC 與 swift 混編 1. 第一個方向從 swift工程 中引入 oc類 1. 1 如何在swift的類中使用oc類 1.2 如何在swift中實現oc的代理方法 &
機器學習之logistic迴歸演算法與程式碼實現
Logistic迴歸演算法與程式
c++ 之 std::move 原理實現與用法總結
在C++11中,標準庫在<utility>中提供了一個有用的函式std::move,std::move並不能移動任何東西,它唯一的功能是將一個左值強制轉化為右值引用,繼而可以通過右值引用使用該值,以用於移動語義。從實現上講,std::move基本等同於一個型別轉換:static_ca
入門 之 js中axios實現與後臺互動入口
格式略 寫不進去 !!! <script src="js/axios.min.js"></script> <script> window.onload = function(){ // 1.第一種 axios
機器學習之AdaBoost原理與程式碼實現
1 2.000000 1.000000 38.500000 66.000000 28.000000 3.000000 3.000000 0.000000 2.000000 5.000000 4.000000 4.000000 0.0
安卓實現電話撥號與資訊的直接傳送
Android實現電話跳轉介面撥號與直接傳送簡訊 一、電話撥號 下面的是我們的最終的效果圖: 首先我們先來貼一下layout的佈局 <LinearLayout xmlns:android="http://schemas.android.com/