項目實戰(zhàn):淺談屬性動畫(1)-探索新玩法

屬性動畫是Google在3.0之后才提出的新動畫框架榨婆,相比傳統(tǒng)動畫Animation只是系統(tǒng)不斷調用onDraw方法重繪界面以實現(xiàn)動畫效果。屬性動畫顧名思義是調用get、set方法真實改變屬性逞力。
傳統(tǒng)Animation有很大的局限性:
1.只是重繪了動畫,事件響應位置卻沒有改變糠爬,因此它不適用于具有交互動畫的效果寇荧,只能做顯示效果;
2.不斷調用onDraw方法重繪很浪費資源执隧;
3.位移揩抡,縮放户侥,旋轉,位移四種動畫峦嗤,組合可以實現(xiàn)豐富效果但仍不如屬性蕊唐。
因此,我們有必要好好學習屬性動畫烁设。
看看Google的API Demos替梨,有許多經(jīng)典實用的小例子。(Google的心血)

是時候看一波代碼了:

ObjectAnimator.ofFloat(image_iv_main,"translationX",0F,200F).setDuration(1000).start();  

讓對象image_iv_main在X軸從0平移到200装黑,時間持續(xù)1000ms副瀑,go!

如果這樣會發(fā)生什么恋谭?

ObjectAnimator.ofFloat(image_iv_main,"translationX",0F,200F).setDuration(1000).start();  
ObjectAnimator.ofFloat(image_iv_main,"translationY",0F,200F).setDuration(1000).start();  
ObjectAnimator.ofFloat(image_iv_main,"rotation",0F,360F).setDuration(1000).start();  

對象會同時發(fā)生3個動畫糠睡,X軸從0平移到200,Y軸從0平移到200疚颊,旋轉360°狈孔,哈,你猜對了嗎材义?
類似的效果還可以通過以下代碼實現(xiàn)均抽,有點代碼復用的感覺。復用p1其掂,p2到忽,p3:

PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation",0F,360F);  
PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY",0F,200F);  
PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationX",0F,200F);  
ObjectAnimator.ofPropertyValuesHolder(image_iv_main,p1,p2,p3).setDuration(2000).start();  

進階玩法,玩組合:

ObjectAnimator animator1 = ObjectAnimator.ofFloat(image_iv_main,"translationX",0F,200F);  
ObjectAnimator animator2 = ObjectAnimator.ofFloat(image_iv_main,"translationY",0F,200F);  
ObjectAnimator animator3 = ObjectAnimator.ofFloat(image_iv_main,"rotation",0F,360F);  
AnimatorSet set = new AnimatorSet();  
set.playTogether(animator1,animator2,animator3);  
set.setDuration(2000);  
set.start();  

可以一起玩清寇,還可以順序玩:

set.playSequentially(animator1,animator2,animator3);  

還可以調順序:

set.play(animator1).with(animator2);  
set.play(animator3).after(animator2);  

更多玩法,等我們去探索~
最后送上完整源代碼护蝶,high起來:

package com.example.quan.quanstudy.objectAnimator;  
  
import android.animation.AnimatorSet;  
import android.animation.ObjectAnimator;  
import android.view.View;  
import android.widget.ImageView;  
import android.widget.Toast;  
  
import com.example.quan.quanstudy.R;  
import com.example.quan.quanstudy.base.BaseActivity;  
  
/** 
 * Created by xingquan.he on 2017/3/15. 
 * Mr.Quan 
 * 屬性動畫第一課 
 * 項目實戰(zhàn):淺談屬性動畫(1)-探索新玩法 http://blog.csdn.net/hxqneuq2012/article/details/52301791 
 */  
  
public class FirstClassActivity extends BaseActivity {  
  
    private ImageView mImageAnimator;  
  
    @Override  
    public int getLayoutId() {  
        return R.layout.activity_first_animator;  
    }  
  
    @Override  
    public void initView() {  
        mImageAnimator = (ImageView) findViewById(R.id.click_iv_animator);  
    }  
  
    public void click(View view){  
        Toast.makeText(this,"Clickd.",Toast.LENGTH_SHORT).show();  
    }  
  
    public void move(View view){  
//        ObjectAnimator.ofFloat(image_iv_main,"translationX",0F,200F).setDuration(1000).start();  
//        ObjectAnimator.ofFloat(image_iv_main,"translationY",0F,200F).setDuration(1000).start();  
//        ObjectAnimator.ofFloat(image_iv_main,"rotation",0F,360F).setDuration(1000).start();  
  
//        PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation",0F,360F);  
//        PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY",0F,200F);  
//        PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationX",0F,200F);  
//        ObjectAnimator.ofPropertyValuesHolder(image_iv_main,p1,p2,p3).setDuration(2000).start();  
  
        ObjectAnimator animator1 = ObjectAnimator.ofFloat(mImageAnimator,"translationX",0F,200F);  
        ObjectAnimator animator2 = ObjectAnimator.ofFloat(mImageAnimator,"translationY",0F,200F);  
        ObjectAnimator animator3 = ObjectAnimator.ofFloat(mImageAnimator,"rotation",0F,360F);  
        AnimatorSet set = new AnimatorSet();  
        //set.playTogether(animator1,animator2,animator3);  
        //set.playSequentially(animator1,animator2,animator3);  
        set.play(animator1).with(animator2);  
        set.play(animator3).after(animator2);  
        set.setDuration(1000);  
        set.start();  
    }  
}  
<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:paddingBottom="@dimen/activity_vertical_margin"  
    android:paddingLeft="@dimen/activity_horizontal_margin"  
    android:paddingRight="@dimen/activity_horizontal_margin"  
    android:paddingTop="@dimen/activity_vertical_margin"  
    tools:context=".MainActivity">  
  
    <ImageView  
        android:layout_width="100dp"  
        android:layout_height="56dp"  
        android:src="@mipmap/quan_shijiazhuang"  
        android:onClick="click"  
        android:id="@+id/click_iv_animator"  
        />  
  
    <Button  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="move"  
        android:layout_alignParentBottom="true"  
        android:layout_centerHorizontal="true"  
        android:layout_marginBottom="50dp"  
        android:onClick="move"  
        android:id="@+id/move_btn_animator"  
        />  
  
</RelativeLayout>  

原創(chuàng)不易华烟,轉載請注明出處哈。

權興權意
產(chǎn)品可以更優(yōu)雅~
項目實戰(zhàn):淺談屬性動畫(1)-探索新玩法 - hxqneuq2012的專欄 - 博客頻道 - CSDN.NET http://blog.csdn.net/hxqneuq2012/article/details/62216824
項目源代碼持灰,歡迎提建議(star)盔夜。
https://github.com/HXQWill/QuanStudy/tree/master/app/src/main/java/com/example/quan/quanstudy/objectAnimator

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市堤魁,隨后出現(xiàn)的幾起案子喂链,更是在濱河造成了極大的恐慌,老刑警劉巖妥泉,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椭微,死亡現(xiàn)場離奇詭異,居然都是意外死亡盲链,警方通過查閱死者的電腦和手機蝇率,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門迟杂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人本慕,你說我怎么就攤上這事排拷。” “怎么了锅尘?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵监氢,是天一觀的道長。 經(jīng)常有香客問我藤违,道長浪腐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任纺弊,我火速辦了婚禮牛欢,結果婚禮上,老公的妹妹穿的比我還像新娘淆游。我一直安慰自己傍睹,他們只是感情好,可當我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布犹菱。 她就那樣靜靜地躺著拾稳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腊脱。 梳的紋絲不亂的頭發(fā)上访得,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機與錄音陕凹,去河邊找鬼悍抑。 笑死,一個胖子當著我的面吹牛杜耙,可吹牛的內容都是我干的搜骡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼佑女,長吁一口氣:“原來是場噩夢啊……” “哼记靡!你這毒婦竟也來了?” 一聲冷哼從身側響起团驱,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摸吠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嚎花,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寸痢,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年贩幻,在試婚紗的時候發(fā)現(xiàn)自己被綠了轿腺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片两嘴。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖族壳,靈堂內的尸體忽然破棺而出憔辫,到底是詐尸還是另有隱情,我是刑警寧澤仿荆,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布贰您,位于F島的核電站,受9級特大地震影響拢操,放射性物質發(fā)生泄漏锦亦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一令境、第九天 我趴在偏房一處隱蔽的房頂上張望杠园。 院中可真熱鬧,春花似錦舔庶、人聲如沸抛蚁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞧甩。三九已至,卻和暖如春弥鹦,著一層夾襖步出監(jiān)牢的瞬間肚逸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工彬坏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朦促,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓栓始,卻偏偏與公主長得像思灰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子混滔,可洞房花燭夜當晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,265評論 25 707
  • 看了很多視頻、文章歹颓,最后卻通通忘記了坯屿,別人的知識依舊是別人的,自己卻什么都沒獲得巍扛。此系列文章旨在加深自己的印象领跛,因...
    DCbryant閱讀 1,866評論 0 4
  • 這是我這個系列的目錄,有興趣的可以看下: android 動畫系列 - 目錄 啊撤奸,終于來到了屬性動畫這里了吠昭,屬性動...
    前行的烏龜閱讀 1,012評論 1 7
  • CYLTableViewPlaceHolder【一行代碼完成“空TableView占位視圖”管理】 導航 與其他框...
    iOS程序犭袁閱讀 9,687評論 12 70
  • 今朝何見新人歡喊括,他日杯盞共歡顏。京臺仙舞漫樓閣矢棚,更聲笑語花燈暖郑什。人人送語聲情淡,別語輕生笑意寒蒲肋。亙古誰人訴情腸蘑拯,哽...
    紫雨林閱讀 237評論 0 1