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圖,所以圖是從翔哥那摳出來的,效果是一樣的。