教你一個(gè)簡(jiǎn)單炫酷的app程序的打開(kāi)動(dòng)畫(huà)(干貨)

文章同步我的csdn博客
app也是有顏值万伤,動(dòng)畫(huà)就是一種化妝術(shù)嗤锉,他讓你的app更加炫酷邮屁,首先給你看下圖

這就是我們今天要做的東西

首先呢募逞,先普及下總體的框架知識(shí),有三種動(dòng)畫(huà)
(1)Drawable Animation:逐幀動(dòng)畫(huà)卜范,就像電影一樣嘀粱,一幀一幀奠骄,拼接在一起在人眼中就是連續(xù)的迁匠,可以簡(jiǎn)單的理解為圖片切換剩瓶,缺點(diǎn)就是圖片過(guò)多或過(guò)大會(huì)造成oom
(2)View Animation:視圖動(dòng)畫(huà),比較適合那種不用和用戶(hù)交互的東湖
(3)Property Animation:是android 3.0以后加入的城丧,為了解決視圖動(dòng)畫(huà)的缺點(diǎn)延曙,就是組件移動(dòng)化為實(shí)際的移動(dòng),現(xiàn)在大部分也用

首先先來(lái)講講視圖動(dòng)畫(huà)亡哄,也就是這次我們實(shí)現(xiàn)上圖效果的方式枝缔,有四種動(dòng)畫(huà)方式
這里寫(xiě)圖片描述


你想一想我們動(dòng)畫(huà)就是會(huì)動(dòng)的畫(huà)面(view)蚊惯,總結(jié)下來(lái)不就是靠這四個(gè)行為:改變透明度(那些view逐漸帶化的)愿卸,view的旋轉(zhuǎn),view的移動(dòng)拣挪,view的縮小放大擦酌,
有兩種表現(xiàn)方式俱诸,一種是java代碼菠劝,一種是xml文件,更推薦后一種睁搭,可讀性會(huì)更強(qiáng)一些赶诊,java代碼的 實(shí)現(xiàn)方式如下

AlPhaAnimation aa=new AlphaAnimation(0,1);//創(chuàng)建一個(gè)透明度動(dòng)畫(huà)實(shí)例
aa.setDuration(100);
view.setAnimation(aa);

很簡(jiǎn)單吧,其他三種動(dòng)畫(huà)同理园骆,就是構(gòu)造器不同而已舔痪,
現(xiàn)在我們來(lái)實(shí)現(xiàn)下開(kāi)篇那個(gè)動(dòng)圖效果,首先我們需要一個(gè)布局文件先貼代碼锌唾,也就是先把材料準(zhǔn)備好

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blue"
    android:orientation="vertical" >
    <LinearLayout
        android:id="@+id/text_lin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:orientation="vertical" >
        
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="醫(yī)立方"
            android:textColor="@color/text_white"
            android:textSize="40sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="好玩的醫(yī)立方"
            android:textColor="@color/text_white"
            android:textSize="14sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/text_hide_lin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:background="@color/blue"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="醫(yī)立方"
            android:textColor="@color/blue"
            android:textSize="40sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="好玩的醫(yī)立方"
            android:textColor="@color/blue"
            android:textSize="14sp" />
    </LinearLayout>

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:src="@mipmap/ic_white_cube" />
</RelativeLayout>

這個(gè)布局包括一個(gè)ImageView和兩個(gè)一模一樣的線性布局(除了字體顏色)锄码,用來(lái)顯示文字,然后把他們?nèi)烤又?div id="rkwlln5" class="image-package">
這里寫(xiě)圖片描述

此時(shí)或許你會(huì)有一個(gè)為什么那些字體不顯示晌涕,因?yàn)樗桓采w掉了滋捶,后面添加布局覆蓋在前一層上面,所以最外層就是一個(gè)imageView而已余黎,對(duì)于同一個(gè)位置的view重窟,后添加的會(huì)把前面添加的給覆蓋下去,這對(duì)我們后來(lái)的字體逐漸出現(xiàn)這是用到這種覆蓋的效果惧财,接下來(lái)我們要開(kāi)始讓這個(gè)動(dòng)畫(huà)動(dòng)起來(lái)了巡扇,一開(kāi)始我們先讓圖片先動(dòng)起來(lái)先扭仁,首先我把這個(gè)動(dòng)畫(huà)分解為4個(gè)部分吧,
第一步厅翔,自由落體乖坠,自然就是用的是位移動(dòng)畫(huà),并且在這個(gè)過(guò)程中那個(gè)圖片不斷的放大

     <scale
        android:duration="1200"
        android:fromXScale="25%"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromYScale="25%"
        android:toXScale="125%"
        android:toYScale="125%"
        android:interpolator="@android:anim/linear_interpolator"/>

    <translate
        android:duration="1200"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="80%p"
        />

如果你之前沒(méi)有接觸過(guò)動(dòng)畫(huà)知给,可能會(huì)對(duì)這幾個(gè)屬性很陌生瓤帚,首先duration指的就是,這個(gè)動(dòng)畫(huà)的持續(xù)時(shí)間涩赢,而fromX(Y)Scale和toX(Y)Scale戈次,指的是圖形x軸y軸放大起始點(diǎn)和終點(diǎn),在我這里就是將圖片充25%放大到125%筒扒,而interpolator這個(gè)屬性指的是差值器怯邪,也就是用來(lái)調(diào)整變化的速度,是加速的花墩,減速呢還是變速悬秉,有這幾種值


這里寫(xiě)圖片描述

接下來(lái)就是位移動(dòng)畫(huà),同樣冰蘑,你想要告訴系統(tǒng)怎么位移肯定也就得告訴他起始點(diǎn)和終點(diǎn)吧和泌,顧名思義,也就是fromX(Y)Delta和toX(Y)Delta啦祠肥,這里重要是是講
80%和80%p是什么區(qū)別武氓,這里p指的是父類(lèi),也就是說(shuō)仇箱,對(duì)于位移來(lái)說(shuō)县恕,80%指的是位移自己長(zhǎng)度的80%,而80%p指的是位移父類(lèi)的長(zhǎng)度80%剂桥,多說(shuō)無(wú)益忠烛,上圖


這里寫(xiě)圖片描述

這里寫(xiě)圖片描述

這里指展示以父類(lèi)為標(biāo)準(zhǔn)的,同理沒(méi)有p就是以自身為標(biāo)準(zhǔn)

第二部自然就是彈上來(lái)又掉下去啦

     <translate
        android:startOffset="1200"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:duration="200"
        android:toYDelta="-15%p"
        />
    <translate
        android:startOffset="1400"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="200"
        android:toYDelta="15%p"
        />

基本和上面差不多权逗,多了一個(gè)新東西美尸,也就是startOffset,指的是動(dòng)畫(huà)開(kāi)始后多少秒執(zhí)行斟薇,這里是1400ms师坎,也就是要在第一步完成之后執(zhí)行啦

接下來(lái)就是第三步啦,這個(gè)和第一步類(lèi)似不過(guò)是相反奔垦,不是往下掉屹耐,二是往上彈,而且這個(gè)過(guò)程中縮小圖片

<set
        android:startOffset="1600"
        android:interpolator="@android:anim/linear_interpolator">
        <scale
            android:duration="1200"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fromXScale="100%"
            android:fromYScale="100%"
            android:toXScale="80%"
            android:toYScale="80%" />

        <translate
            android:duration="1200"
            android:toXDelta="-20%p"
            android:toYDelta="-50%p"/>
    </set>

第四步啦,也就是字體逐漸顯示惶岭,這里你想一想我們現(xiàn)實(shí)中的用一塊布這是牌匾寿弱,然后將布從左往右啦,那么字體是不是就是從左往右逐漸顯示啦按灶?而所謂的不不就是我在布局中重復(fù)定義了症革,卻把字體設(shè)置成和背景一樣顏色的線性布局嘛,先把我們要顯示字體移動(dòng)到指定位置鸯旁,這里是向x軸移動(dòng)自身長(zhǎng)度35%噪矛,y軸上移動(dòng),父類(lèi)高度的15%铺罢,代碼如下

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <translate

        android:fromXDelta="35%"
        android:fromYDelta="15%p"
        android:toXDelta="35%"
        android:toYDelta="15%p"/>
</set>

接下來(lái)就是要移動(dòng)所謂‘拉布’艇挨,在這600ms時(shí)間內(nèi),他就會(huì)逐漸把遮住的字逐漸顯示出來(lái)啦

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="600"
    android:fillAfter="true"
    >
    <translate
        android:fromXDelta="35%"
        android:fromYDelta="15%p"
        android:toXDelta="135%"
        android:toYDelta="15%p"
        />
</set>

最后一步只需要用java代碼把動(dòng)畫(huà)加載進(jìn)去就可以了

final LinearLayout tv_lin= (LinearLayout) findViewById(R.id.text_lin);//要顯示的字體
        final LinearLayout tv_hide_lin= (LinearLayout) findViewById(R.id.text_hide_lin);//所謂的布
        ImageView logo= (ImageView) findViewById(R.id.image);//圖片
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.splash);
        logo.startAnimation(animation);//開(kāi)始執(zhí)行動(dòng)畫(huà)
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                //第一個(gè)動(dòng)畫(huà)執(zhí)行完后執(zhí)行第二個(gè)動(dòng)畫(huà)就是那個(gè)字體顯示那部分
                animation=AnimationUtils.loadAnimation(MainActivity.this,R.anim.text_splash_position);
                tv_lin.startAnimation(animation);
                animation=AnimationUtils.loadAnimation(MainActivity.this,R.anim.text_canvas);
                tv_hide_lin.startAnimation(animation);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

我知道看到這里你肯定還有不懂得地方韭赘,我就附上源碼源碼地址

ps:如果你覺(jué)得我的文章對(duì)你有幫助缩滨,那么就頂那里點(diǎn)一下或者github上star一下啦,也可以關(guān)注我的公眾號(hào)泉瞻,左上角有二維碼脉漏,有什么問(wèn)題都可以問(wèn)我,文章會(huì)同步發(fā)布哦
ps:如果你覺(jué)得我文章哪里寫(xiě)錯(cuò)了或者哪里太糟糕了袖牙,歡迎指出侧巨,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鞭达,隨后出現(xiàn)的幾起案子司忱,更是在濱河造成了極大的恐慌,老刑警劉巖碉怔,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烘贴,死亡現(xiàn)場(chǎng)離奇詭異禁添,居然都是意外死亡撮胧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)老翘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)芹啥,“玉大人,你說(shuō)我怎么就攤上這事铺峭∧够常” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵卫键,是天一觀的道長(zhǎng)傀履。 經(jīng)常有香客問(wèn)我,道長(zhǎng)莉炉,這世上最難降的妖魔是什么钓账? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任碴犬,我火速辦了婚禮,結(jié)果婚禮上梆暮,老公的妹妹穿的比我還像新娘服协。我一直安慰自己,他們只是感情好啦粹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布偿荷。 她就那樣靜靜地躺著,像睡著了一般唠椭。 火紅的嫁衣襯著肌膚如雪跳纳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,793評(píng)論 1 314
  • 那天贪嫂,我揣著相機(jī)與錄音棒旗,去河邊找鬼。 笑死撩荣,一個(gè)胖子當(dāng)著我的面吹牛铣揉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播餐曹,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼逛拱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了台猴?” 一聲冷哼從身側(cè)響起朽合,我...
    開(kāi)封第一講書(shū)人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饱狂,沒(méi)想到半個(gè)月后曹步,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡休讳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年讲婚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俊柔。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筹麸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雏婶,到底是詐尸還是另有隱情物赶,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布留晚,位于F島的核電站酵紫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奖地,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一状蜗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹉动,春花似錦轧坎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至械筛,卻和暖如春捎泻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埋哟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工笆豁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赤赊。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓闯狱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親抛计。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哄孤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,336評(píng)論 25 707
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 6,451評(píng)論 0 17
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)吹截、插件瘦陈、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,126評(píng)論 4 61
  • java NIO(一)Channel nio中的channel與流的區(qū)別在于,流的讀寫(xiě)通常是單向的波俄,而通道可以異步...
    devel_carl閱讀 217評(píng)論 0 0
  • 《看圖寫(xiě)詩(shī)——不離不棄》 身上布滿(mǎn)滄桑 一片樹(shù)葉的生命也很脆弱 風(fēng)是殺手之一 你若要走晨逝,我也不留 另一片不離不棄 ...
    金書(shū)js閱讀 233評(píng)論 2 3