最近在UI中國(guó)看見一個(gè)很好看的效果寝并,它是這樣的:
鏈接地址:http://www.ui.cn/detail/237678.html
然后我上網(wǎng)搜了一下,發(fā)現(xiàn)Android5.0以上版本蓬蝶,在Activity切換時(shí)是有提供動(dòng)畫的本慕。
所以這篇文章會(huì)簡(jiǎn)單的介紹一下Android的幾種轉(zhuǎn)場(chǎng)動(dòng)畫,才疏學(xué)淺膘婶,講不深入缺前,只講下基本用法,見諒悬襟。
Android的轉(zhuǎn)場(chǎng)動(dòng)畫衅码,有如下幾種:
Explode:
使用方法:
首先是將啟動(dòng)Activity的方法改為如下所示:
startActivity(new Intent(this, SecondActivity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
然后在SecondActivity中設(shè)置轉(zhuǎn)場(chǎng)方式:
getWindow().setEnterTransition(new Explode().setDuration(2000));
getWindow().setExitTransition(new Explode().setDuration(2000));
這個(gè)的轉(zhuǎn)場(chǎng)方式有入場(chǎng)和出場(chǎng)。
好了脊岳,這樣就可以了逝段,大家可以試試垛玻,就能看到效果了。
Slide:
和上一個(gè)類似奶躯,我們只需要把Explode改為Slide即可:
getWindow().setEnterTransition(new Slide().setDuration(2000));
getWindow().setExitTransition(new Slide().setDuration(2000));
Fade:
相信大家都猜到了帚桩,我們只需要把Slide改為Fade即可:
getWindow().setEnterTransition(new Fade().setDuration(2000));
getWindow().setExitTransition(new Fade().setDuration(2000));
共享元素:
共享元素是一個(gè)比較神奇的東西,在開始處UI中國(guó)的那個(gè)效果嘹黔,我也仿著實(shí)現(xiàn)了一下账嚎,就是用共享元素實(shí)現(xiàn)的。
可以看到場(chǎng)景的切換很自然儡蔓。圖片慢慢放大郭蕉,好像慢慢變成了SecondActivity 里的圖片。當(dāng)返回上一個(gè)Activity 時(shí)喂江,感覺圖片慢慢變小召锈,然后慢慢的變成了上一個(gè)Activity的圖片。
這就是共享元素获询,當(dāng)兩個(gè)Activity中有同一個(gè)控件時(shí)烟勋,我們就可以使用共享元素動(dòng)畫。
使用方法:
首先我們需要在需要共享的控件中聲明android:transitionName="myImage"屬性(在兩個(gè)Activity布局文件中都要聲明筐付,而且值要一樣)卵惦。
在我的例子中,那張圖片就是共享元素瓦戚,其xml文件如下:
<ImageView
android:id="@+id/image"
android:transitionName="myImage"
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@mipmap/timg2"
android:onClick="share"/>
然后就是啟動(dòng)Activity:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,image,"myImage").toBundle());
可以發(fā)現(xiàn)這里多了兩個(gè)參數(shù)沮尿,一個(gè)是image,這個(gè)就是你的共享元素view较解,后面那個(gè)就是你的transitionName畜疾。
這樣就實(shí)現(xiàn)了共享元素動(dòng)畫,大家可以試一試印衔。
那么如果我們有多個(gè)共享元素怎么辦呢啡捶?
我們可以使用Pair.create方法,如下:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,Pair.create((View)image,"myImage"),Pair.create((View)text,"myText")).toBundle());
Pair.create里有兩個(gè)參數(shù)奸焙,第一個(gè)是共享元素view(注意這里類型必須為view類型)瞎暑,第二個(gè)是transitionName
好了,這樣的話与帆,Activity的轉(zhuǎn)場(chǎng)動(dòng)畫就講完了了赌。
相關(guān)代碼:https://github.com/ChenTianSaber/AndroidTransition