1. 程式人生 > >Android學習之5.X過渡動畫的實現

Android學習之5.X過渡動畫的實現

你是否對安卓現有的頁面跳轉動畫覺得單一生硬呢?

Android 5.0中,Google對動畫效果做了更深的詮釋,為Activity的跳轉設計更加豐富的動畫效果。

看下效果圖

這裡寫圖片描述

由於不會Gif,這圖是扣來的,但是我們就是來講述這種效果是如何實現的

Android 5.X提供了三種Transition型別

進入:一個Activity的所有檢視如何進入螢幕

退出:一個Activity的所有檢視,如何退出螢幕

共享:一個共享元素過渡動畫決定兩個Activity之間的過渡,如何共享他們的檢視

進入退出效果:

explode(分解)—-從螢幕中間進入或退出

slide(滑動)—-從螢幕邊緣進入或退出,(包括狀態列)

fade(淡出)—-類似透明度漸變動畫,通過改變透明度來進入或者退出檢視

共享元素:

changeBounds —- 改變目標檢視的佈局邊界

changeClipBounds —- 裁剪目標檢視邊界

changeTransform —–改變目標檢視的縮放比例和旋轉角度

changeImageTransform —- 改變目標圖片的大小和縮放比例

實現方式:

Activity A:

  @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public void explode(View view){

        intent=new
Intent(this,Transitions.class); intent.putExtra("flag",0); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void slide(View view){ intent=new Intent(this,Transitions.class); intent.putExtra("flag"
,1); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void fade(View view){ intent=new Intent(this,Transitions.class); intent.putExtra("flag",2); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void normol(View view){ intent=new Intent(this,Transitions.class); intent.putExtra("flag",3); startActivity(intent); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void share(View view){ intent=new Intent(this,Transitions.class); intent.putExtra("flag",4); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle()); }

這裡為了比較,設定了explode,slide,fade,normol,share,五種過渡方式,大家可以看下實現的動畫效果

Activity B:

 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
        int flag = getIntent().getExtras().getInt("flag");
        switch (flag) {
            case 0:
                Explode explode = new Explode();
                explode.setDuration(2000);
                getWindow().setEnterTransition(explode);
                getWindow().setExitTransition(explode);
                break;
            case 1:
                Slide slide=new Slide();
                slide.setDuration(2000);
                getWindow().setEnterTransition(slide);
                getWindow().setExitTransition(slide);
                break;
            case 2:
                Fade fade=new Fade();
                fade.setDuration(2000);
                getWindow().setEnterTransition(fade);
                getWindow().setExitTransition(fade);
                break;
            case 3:
                break;
            case 4:
                break;
        }
        setContentView(R.layout.transitions);

也可以通過style實現

<style name="myTheme" parent="android:Theme.Material">  
        <!-- 允許使用transitions -->  
        <item name="android:windowContentTransitions">true</item>  

        <!-- 指定進入和退出transitions -->  
        <item name="android:windowEnterTransition">@transition/explode</item>  
        <item name="android:windowExitTransition">@transition/explode</item>  

        <!-- 指定shared element transitions -->  
        <item name="android:windowSharedElementEnterTransition">  
            @transition/change_image_transform</item>  
        <item name="android:windowSharedElementExitTransition">  
            @transition/change_image_transform</item>  
</style>  

這裡explode,slide,fade動畫都很好理解,也很好實現

共享元素需要講一下

首先你需要在Activity A中設定共享元素,新增屬性

android:transitionName="share" 

當然,“share”可以自定義,這個沒有侷限。

在Activity B中也需要給要實現共享元素效果 的元素增加此屬性

android:transitionName="share" 

程式碼中作如下設定

intent=new Intent(this,Transitions.class);
        intent.putExtra("flag",4);
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle());

實現多個共享元素的話

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,  
        Pair.create(view1, "agreedName1"),  
        Pair.create(view2, "agreedName2"));  

實現效果

這裡寫圖片描述

注意點:

執行機器必須是api21以上才有效果,因為是基於5.0的嘛,所以用模擬器執行效果小夥伴要注意一下,不然會出現

   Caused by: java.lang.NoSuchMethodError: android.app.ActivityOptions.makeSceneTransitionAnimation

好啦,就介紹到這啦,程式碼大家可以下載執行一下,看下效果。

程式碼下載

相關推薦

Android學習5.X過渡動畫實現

你是否對安卓現有的頁面跳轉動畫覺得單一生硬呢? Android 5.0中,Google對動畫效果做了更深的詮釋,為Activity的跳轉設計更加豐富的動畫效果。 看下效果圖 由於不會Gif,這圖是扣來的,但是我們就是來講述這種效果是如何實現的 And

Android學習servlet登入、註冊實現

public class HttpLogin { public static String LoginByPost(String id,String password){ String address = "http://www.khqust.top/MyWebsite/an

Android開發RecyclerView的互動動畫(實現拖拽和刪除)

做RecyclerView做相關的動畫效果的時候,用的最多的是v7包下的ItemTouchHelper類,這個類很強大,如有興趣的童鞋可以自行翻看原始碼,接下來我帶領大家實現RecyclerView相關的互動動畫。大家看下面的效果(拖拽和刪除): ------------

Android學習Android 5.0分享動畫實現微信點選全屏效果

Android5.0過渡動畫,請看 今天用分享動畫實現微信點選全屏效果 本文原始碼下載地址 peizhi 配置 build.gradle: compile 'com.android.support:recyclerview-v7:23.

Android 學習逐幀動畫(Frame)

http sta ram override start pub fill creat 代碼 幀動畫就是將一些列圖片。依次播放。利用肉眼的“視覺暫留”的原理,給用戶的感覺是動畫的錯覺,逐幀動畫的原理和早期的電影原理是一樣的。 a:須要定義逐幀動畫,能夠通過代碼定義。也能夠

Android學習動畫總結(一)

寫在前面:本文是根據hencoder提供的教程寫的總結。HenCoder https://hencoder.com。        Android裡動畫可以分為兩類:Animation和Transition,其中Animation又可以分為View Animation和Pr

Android學習動畫總結(二)

寫在前面:本文是根據hencoder提供的教程寫的總結。HenCoder https://hencoder.com。      關於ObjectAnimator可以用ofInt()來做整數的屬性動畫和ofFloat()來做小數的屬性動畫。當需要對其他型別的屬性來做動畫就需要

Android學習RecyclerView學習實現瀑布流式佈局)

RecyclerView,大家可以通過匯入support-v7對其進行使用。  如果使用AndroidStudio開發, 需要在build.gradle中新增: compile 'com.android.support:appcompat-v7:24.2.1' com

android安全學習5—apk中的META-INF目錄

什麼是簽名 在android系統中,不同App之間是依靠包名、數字簽名共同來進行區分的。雖然Google建議我們用自己的域名的反寫作為包名的字首來定義包名(例如com.google.),但是這並不能做到萬無一失,我們不能單單利用包名來區分ap

Android學習BottomNavigationBar實現Android特色底部導航欄

Android底部導航欄的實現方式特別多,例如TabHost,TabLayout,或者TextView等,都可以實現底部導航欄的效果,但是卻沒有Google官方統一的導航欄樣式,今天講的就是Google最近新增到Material design中的底部導航欄Bot

android 學習Fragment+ViewPager實現頁面左右滑動標籤頁

ViewPager 結合Fragment實現一個Activity裡包含多個可滑動的標籤頁,每個標籤頁可以有獨立的佈局及響應。 如下所示。 我們可以藉助TabLayout來實現頂部導航。Activity佈局檔案如下: <?xml version="1.0" encod

Android學習筆記——用ObjectAnimator平移動畫仿微信表情雨的簡單實現

  最近需要實現類似微信聊天介面輸入文字命中關鍵字出現Emoji 表情雨的動畫效果,自己試著實現了一下,主要就是用 ObjectAnimatior 的 平移 動畫,用隨機函式控制每個Emoji 的 橫

Android學習仿QQ聊天介面的實現

前言: 好幾天沒動手了,感覺有點手懶了,幹我們這行真的一點不能懈怠啊! 回來寫了個仿扣扣聊天介面的實現,動態新增聊天內容等! 分析: 主體:RecylerView+LinearLayout 效果: 簡單的模仿一下扣扣。 下面介紹一下怎麼實現的

Android開發Tween(補間動畫)完全解析(下)——程式碼實現

在上一篇文章中,我們詳細討論了Tween動畫的xml的實現以及interpolator的使用,相信通過上篇文章大家對Tween動畫的xml屬性的配置會有一個詳細的理解,當然這篇文章也是承接上篇文章,所以強烈建議先閱讀上篇文章:Android開發之Tween(

Android學習路------自定義控制元件,圓形進度條的簡單實現

簡單介紹 主要是通過自定義一個view類,然後通過操作canvas和paint進行效果的實現 Step 1 新建一個attr.xml,這裡主要是為了自定義我們的控制元件屬性,attr開頭的語句表示控制元件的自定義屬性,在這裡為了實現圓形進度條,定義了一

Android學習介面篇(六)ViewPager學習Android引導介面的實現

ViewPager:是android擴充套件包v4包中的類,這個類可以讓使用者左右切換當前的view。主要特性有: ViewPager類直接繼承了ViewGroup類,所以他是一個容器類,可以在其

Android學習基於DrawerLayout的側邊欄實現

本例,是基於AndroidStudio開發,用到v7包下DrawerLayout,Toolbar,和android.support.design下的NavigationView,需要在gradle中配置 compile 'com.android.support:appco

Android開發Tween(補間動畫)完全解析(上)——xml檔案配置的實現

相信不管做了多長時間開發的人都用過Tween動畫,從剛開始工作到現在我也是用了N次Tween動畫,但是每一次使用總感覺掌握的不夠全面,所以花了點時間詳細的總結了下Tween動畫,其實在androi

Android學習 圓角邊框的幾種實現方式

首先我將貼出幾種實現圓角邊框的dmeo程式效果圖: 方式一:使用shape元素填充背景,設定圓角/帶弧度的角        1、首先在 \res\drawable下新建Shape為根元素的資原始檔:corners_bg.xml, 程式碼如下: <?xml vers

Android學習CoordinatorLayout輕鬆實現360軟體詳情頁

今天在專案中,遇見實現類似360軟體詳情頁的效果,結合現在比較流行的Material design,採用了CoordinatorLayout來實現這個效果,跟大家分享一下。 首先,看一下需求的效果,由於不會搞gif圖,所以圖是從翔哥那摳出來的,效果是一樣的。