Android中Activity過渡動(dòng)畫的實(shí)例講解
前言
以前Activty之間得跳轉(zhuǎn)非常生硬,自Android.5X后,Google對(duì)Activity的切換設(shè)計(jì)更多豐富的動(dòng)畫效果。
Android 5.X提供了三種Transition類型,具體如下:
✧進(jìn)入:一個(gè)進(jìn)人的過渡動(dòng)畫決定Activity中的所有的視圖怎么進(jìn)入屏幕。
✧退出:一個(gè)退出的過渡動(dòng)畫決定-個(gè)Activity 中的所有視圖怎么退出屏幕。
✧共享元素:一個(gè)共享元素過渡動(dòng)畫決定兩個(gè)Activities 之間的過渡,怎么共享它們的視圖。
進(jìn)入和退出動(dòng)畫效果包括如下三種
✧explode (分解)——從屏幕中間進(jìn)或出,移動(dòng)視圖
✧slide (滑動(dòng)) ——從屏 幕邊緣進(jìn)或出,移動(dòng)視圖
✧fade(淡出)——通過改變屏幕上的視圖的不透明度達(dá)到添加或者移除視圖
共享元素包括:
✧changeBounds——改變目標(biāo)視圖的布局邊界
✧changeClipBounds——裁剪目標(biāo)視圖邊界
✧changeTransform——改變目標(biāo)規(guī)圖的編放比例和能轉(zhuǎn)角度
✧changelmagTransfom——改空目標(biāo)圖片的大小和縮放比例
分解動(dòng)畫
效果視頻

解析
分解動(dòng)畫的進(jìn)場(chǎng)動(dòng)畫為上下向中間擠壓,退出動(dòng)畫為上下向外散開
通過在跳轉(zhuǎn)Activity的時(shí)候使用ActivityOptions.makeSceneTransitionAnimation( this ).toBundle()方法進(jìn)行動(dòng)畫聲明,
startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );
然后再另外一個(gè)Activity設(shè)置動(dòng)畫效果,分解動(dòng)畫進(jìn)場(chǎng)與退出代碼如下
進(jìn)場(chǎng)效果代碼如下
getWindow().setEnterTransition( new Explode( ) );
退場(chǎng)效果代碼如下
getWindow().setExitTransition( new Explode( ) );
全部代碼在文章底部會(huì)全部貼出
全部代碼在文章底部會(huì)全部貼出
全部代碼在文章底部會(huì)全部貼出
滑動(dòng)動(dòng)畫
效果視頻

解析
滑動(dòng)動(dòng)畫的進(jìn)場(chǎng)動(dòng)畫為逐漸向上進(jìn)入,退出動(dòng)畫為逐漸向下退出
通過在跳轉(zhuǎn)Activity的時(shí)候使用ActivityOptions.makeSceneTransitionAnimation( this ).toBundle()方法進(jìn)行動(dòng)畫聲明,
startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );
然后再另外一個(gè)Activity設(shè)置動(dòng)畫效果,進(jìn)場(chǎng)與退出代碼如下
進(jìn)場(chǎng)效果代碼如下
getWindow().setEnterTransition( new Slide( ) );
退場(chǎng)效果代碼如下
getWindow().setExitTransition( new Slide( ) );
全部代碼在文章底部會(huì)全部貼出
全部代碼在文章底部會(huì)全部貼出
全部代碼在文章底部會(huì)全部貼出
淡出動(dòng)畫
效果視頻

解析
談話動(dòng)畫的進(jìn)場(chǎng)動(dòng)畫為由虛到實(shí),由淺到深,退出動(dòng)畫則相反
通過在跳轉(zhuǎn)Activity的時(shí)候使用ActivityOptions.makeSceneTransitionAnimation( this ).toBundle()方法進(jìn)行動(dòng)畫聲明,
startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );
然后再另外一個(gè)Activity設(shè)置動(dòng)畫效果,進(jìn)場(chǎng)與退出代碼如下
進(jìn)場(chǎng)效果代碼如下
getWindow().setEnterTransition( new Fade( ) );
退場(chǎng)效果代碼如下
getWindow().setExitTransition( new Fade( ) );
全部代碼在文章底部會(huì)全部貼出
全部代碼在文章底部會(huì)全部貼出
全部代碼在文章底部會(huì)全部貼出
共享元素
共享單個(gè)元素
效果視頻

解析
共享元素需要再XML布局文件中綁定一個(gè)相同的名稱,例如再進(jìn)場(chǎng)的Activity XML布局文件中的 android:transitionName="“屬性為share1,那么再另外一個(gè)Activity 的XML布局文件中 android:transitionName=”"屬性也應(yīng)該設(shè)置為share1,保持一致
<Button
android:id="@+id/share1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="share1"
android:transitionName="share1"
android:layout_gravity="center"/>
設(shè)置完布局文件中的屬性之后,我們?cè)貯ctiviy中設(shè)置如下代碼,其中share1是我們申明的Button控件的定義share1 = findViewById( R.id.share1 );
其中字符串"share1"為我們?cè)赬ML文件定義的屬性名稱
startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" )).toBundle() );
在第一個(gè)Activity中設(shè)置完成之后,我們需要在跳轉(zhuǎn)之后的Activity進(jìn)行接收,如上面所述,需要在XML布局文件中 android:transitionName=""屬性設(shè)置為share1,代碼如圖所示

<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:src="@drawable/sky"
android:transitionName="share1"
android:scaleType="fitXY"/>
綁定相同屬性之后,我們就無需在Activity進(jìn)行任何設(shè)置,即可看到效果
共享多個(gè)元素
效果視頻

多個(gè)元素共享與單個(gè)元素共享原理一樣,在第一個(gè)Activity需要定義多個(gè)不同的名稱進(jìn)行綁定,此處以兩個(gè)為例
<Button
android:id="@+id/share1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="share1"
android:transitionName="share1"
android:layout_gravity="center"/>
<Button
android:id="@+id/share2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="share2"
android:transitionName="share2"
android:layout_gravity="center"/>
然后再Activity中進(jìn)行屬性傳遞
/*共享多個(gè)元素*/ startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" ), Pair.create( (View)share2,"share2" )).toBundle() );
然后,統(tǒng)一再另外一個(gè)Activty的XML布局文件設(shè)置相對(duì)應(yīng)的屬性名稱
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:src="@drawable/sky"
android:transitionName="share1"
android:scaleType="fitXY"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:src="@drawable/ground"
android:transitionName="share2"
android:scaleType="fitXY"/>
全部代碼
第一個(gè)Activity XML布局文件代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
android:background="#cc00cc"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="explode"
android:onClick="Explode"
android:layout_gravity="center"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="slide"
android:onClick="Slide"
android:layout_gravity="center"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fade"
android:onClick="Fade"
android:layout_gravity="center"/>
<Button
android:id="@+id/share1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="share1"
android:transitionName="share1"
android:layout_gravity="center"/>
<Button
android:id="@+id/share2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="share2"
android:transitionName="share2"
android:layout_gravity="center"/>
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:text="SingleShare"
android:textAllCaps="false"
android:onClick="SingleShare"
android:layout_gravity="center"/>
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:text="MultShare"
android:textAllCaps="false"
android:onClick="MultShare"
android:layout_gravity="center"/>
</LinearLayout>
第一個(gè)Activity 代碼
public class MainActivity extends AppCompatActivity {
private Button share1,share2;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
share1 = findViewById( R.id.share1 );
share2 = findViewById( R.id.share2 );
}
public void Explode(View view) {
ReturnActivity(0);
}
public void Slide(View view) {
ReturnActivity(1);
}
public void Fade(View view) {
ReturnActivity(2);
}
public void SingleShare(View view) {
ReturnActivity(3);
}
public void MultShare(View view) {
ReturnActivity(4);
}
private void ReturnActivity(int num){
intent = new Intent( this, TransitionActivity.class);
switch (num){
case 0:
intent.putExtra( "flag",0 );
break;
case 1:
intent.putExtra( "flag",1 );
break;
case 2:
intent.putExtra( "flag",2 );
break;
case 3:
case 4:
intent.putExtra( "flag",3 );
break;
}
if (num < 3){
startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );
}else if (num == 3){
/*共享單個(gè)元素*/
startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" )).toBundle() );
}else {
/*共享多個(gè)元素*/
startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" ), Pair.create( (View)share2,"share2" )).toBundle() );
}
}
}
第二個(gè)Activity XML布局文件代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TransitionActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:src="@drawable/sky"
android:transitionName="share1"
android:scaleType="fitXY"/>
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="center"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:src="@drawable/ground"
android:transitionName="share2"
android:scaleType="fitXY"/>
</LinearLayout>
第二個(gè)Activity 代碼
在第二個(gè)Activity設(shè)置getWindow().requestFeature( Window.FEATURE_CONTENT_TRANSITIONS );標(biāo)識(shí)符,即可設(shè)置動(dòng)畫效果
public class TransitionActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
getWindow().requestFeature( Window.FEATURE_CONTENT_TRANSITIONS );
int flag = getIntent().getExtras().getInt( "flag" );
switch (flag){
case 0:
getWindow().setEnterTransition( new Explode( ) );
getWindow().setExitTransition( new Explode( ) );
break;
case 1:
getWindow().setEnterTransition( new Slide( ) );
getWindow().setExitTransition( new Slide( ) );
break;
case 2:
getWindow().setEnterTransition( new Fade( ) );
getWindow().setExitTransition( new Fade( ) );
break;
case 3:
break;
}
setContentView( R.layout.activity_transition );
}
}
總結(jié)
到此這篇關(guān)于Android中Activity過渡動(dòng)畫的文章就介紹到這了,更多相關(guān)Android Activity過渡動(dòng)畫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android?進(jìn)入Activity時(shí)如何禁止彈出軟鍵盤輸入法
- Android中Activity組件實(shí)例介紹
- Android應(yīng)用內(nèi)懸浮窗Activity的簡(jiǎn)單實(shí)現(xiàn)
- Android四大組件之Activity詳細(xì)介紹
- Android?Activity生命周期調(diào)用的理解
- Android Activity活動(dòng)頁面跳轉(zhuǎn)與頁面?zhèn)髦?/a>
- Android activity動(dòng)畫不生效原因及解決方案總結(jié)
- Android入門教程之組件Activity的生命周期詳解
- Android四大組件之Activity深入解讀生命周期
相關(guān)文章
Android開發(fā)教程之調(diào)用攝像頭功能的方法詳解
這篇文章主要介紹了Android調(diào)用攝像頭功能的方法,詳細(xì)分析了Android調(diào)用攝像頭功能的權(quán)限設(shè)置、功能代碼與實(shí)現(xiàn)步驟,需要的朋友可以參考下2016-06-06
Android動(dòng)態(tài)顯示當(dāng)前年月日時(shí)分秒系統(tǒng)時(shí)間(示例代碼)
這篇文章主要介紹了Android動(dòng)態(tài)顯示當(dāng)前年月日時(shí)分秒系統(tǒng)時(shí)間的示例代碼,需要的朋友可以參考下2017-05-05
Android TextView自定義數(shù)字滾動(dòng)動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了Android TextView自定義數(shù)字滾動(dòng)動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
Android Studio時(shí)間選擇器的創(chuàng)建方法
這篇文章主要為大家詳細(xì)介紹了Android Studio時(shí)間選擇器的創(chuàng)建方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android 自定義TextView實(shí)現(xiàn)文本內(nèi)容自動(dòng)調(diào)整字體大小
本文主要介紹了Android 自定義TextView實(shí)現(xiàn)文本內(nèi)容自動(dòng)調(diào)整字體大小以適應(yīng)TextView的大小的方法。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03
Android實(shí)現(xiàn)自定義ImageView的圓角矩形圖片效果
android顯示圓角矩形的圖片其原理就是首先獲取到圖片的Bitmap,然后進(jìn)行裁剪對(duì)應(yīng)的圓角矩形的bitmap,然后在onDraw()進(jìn)行繪制圓角矩形圖片輸出2018-05-05

