Material Design詳解

轉: 

ANDROID L——Material Design詳解(主題和佈局)

ANDROID L——Material Design詳解(視圖和陰影)

ANDROID L——Material Design詳解(UI控件)

ANDROID L——Material Design詳解(動畫篇)



Material Theme


使用Material主題:


Material主題只能應用在Android L版本。

應用Material主題很簡單,只需要修改res/values/styles.xml文件,使其繼承android:Theme.Material。如下:

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <!-- res/values/styles.xml -->  
  2. <resources>  
  3.   <!-- your app's theme inherits from the Material theme -->  
  4.   <style name="AppTheme" parent="android:Theme.Material">  
  5.     <!-- theme customizations -->  
  6.   </style>  
  7. </resources>  

或者在AndroidManifest.xml中直接設置主題:

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. android:theme="@android:style/Theme.Material.Light"  



自定義Material主題:


material主題可以定義爲如下形式:

  • @android:style/Theme.Material 
  • @android:style/Theme.Material.Light
  • @android:style/Theme.Material.Light.DarkActionBar




對於其他主題風格可以參考API文檔(android.R.style



自定義顏色基調(color palette)


material可以根據自定的品牌風格,自定義主題的基礎色調,如下(參考下方圖片):

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <resources>  
  2.   <!-- inherit from the material theme -->  
  3.   <style name="AppTheme" parent="android:Theme.Material">  
  4.     <!-- Main theme colors -->  
  5.     <!--   your app's branding color (for the app bar) -->  
  6.     <item name="android:colorPrimary">@color/primary</item>  
  7.     <!--   darker variant of colorPrimary (for status bar, contextual app bars) -->  
  8.     <item name="android:colorPrimaryDark">@color/primary_dark</item>  
  9.     <!--   theme UI controls like checkboxes and text fields -->  
  10.     <item name="android:colorAccent">@color/accent</item>  
  11.   </style>  
  12. </resources>  


自定義狀態條和導航條:


material還允許你輕鬆的自定義狀態條和導航條的顏色。

可以使用如下屬性參考下方圖片

android:statusBarColorWindow.setStatusBarColor





兼容性:


由於Material Theme只可以在Android L Developer Preview中使用。

所以在低版本使用的話就需要爲其另設一套主題:

在老版本使用一套主題 res/values/styles.xml在新版本使用Material主題res/values-v21/styles.xml.





設計佈局


Android L的一個重要的設計理念就是要在各種平臺上創建一個統一的風格





在設計主題和佈局之前,你首先要看一下 material design specification這篇文章(Google官方關於如何設計的文章)。


文章從Aniamation, Style, Layout, Components, Patterns, Usability, Resources等幾方面非常詳細的介紹瞭如何正確的設計界面。



Layout特點簡述:


我個人簡單理解(非常初級的理解)Android L的Material設計中Layout主要有以下幾點:



Paper Craft(紙工藝):

material的設計中,每一個應用程序所繪製的像素都像駐留在一張紙上。

紙具有平坦的背景顏色,並且可以調整大小,以滿足各種用途。一個典型的佈局是由多張紙組成。




Floating Actions

浮動操作,我也不知道翻譯成什麼比較貼切。

我個人理解它主要作用是一個承上啓下的浮動按鈕,承接了兩個佈局或者不同功能的轉換



Z軸:

Android L中相對於之前X,Y軸又新增了Z軸的概念,有了Z軸可以做出更加具有立體感的控件。

如下圖是一個根據按鈕狀態來調整Z軸的高度



通過對佈局中每個視圖設置不同的Z軸可以使佈局更具立體感,並且可以突出重點。




兼容性:


爲了適應Material Design的變化,所以Android L版本的佈局並不能和老版本的通用。

我們可以使用不同文件目錄,來設置兩套佈局分別對應Android L和低版本:

res/layout/res/layout-v21/



*************************************************************************************************************************************************************************



視圖和陰影


View的大小位置都是通過x,y確定的,現在有了z軸的概念,而這個z值就是View的高度(elevation),而高度決定了陰影(shadow)的大小。





View Elevation(視圖高度)


View的z值由兩部分組成,elevationtranslationZ(它們都是Android L新引入的屬性)

eleavation是靜態的成員,translationZ是用來做動畫。

Z = elevation + translationZ


在layout中使用 android:elevation屬性去定義 

在代碼中使用 View.setElevation 方法去定義 

設置視圖的translation,可以使用View.setTranslationZ方法 

新的ViewPropertyAnimator.zViewPropertyAnimator.translationZ方法可以設置視圖的elevation


新的屬性值:translationZ允許你創建一個動畫暫時的反應出View的高度值(elevation)變化。

這對於響應觸摸手勢很有用處,請看下面代碼(官方Demo中的代碼):

  1. int action = motionEvent.getActionMasked();  
  2.                 /* Raise view on ACTION_DOWN and lower it on ACTION_UP. */  
  3.                 switch (action) {  
  4.                     case MotionEvent.ACTION_DOWN:  
  5.                         Log.d(TAG, "ACTION_DOWN on view.");  
  6.                         view.setTranslationZ(120);  
  7.                         break;  
  8.                     case MotionEvent.ACTION_UP:  
  9.                         Log.d(TAG, "ACTION_UP on view.");  
  10.                         view.setTranslationZ(0);  
  11.                         break;  
  12.                     default:  
  13.                         return false;  
  14.                 }  

一個簡單觸摸監聽,在點擊和擡起的時候分別設置translationZ的值,效果如下圖所示:

     


Shadows and Outlines(陰影和輪廓)


視圖的背景邊界決定了默認的陰影形狀。輪廓(Outlines)代表了圖形對象的外形狀,並確定了對於觸摸反饋的波紋區域。


在Android L中設置一個陰影很簡單,只需要兩點:

1.設置eleavation值

2.添加一個背景或者outline


可以在xml中通過定義一個背景來設置outline

  1. <TextView  
  2.     android:id="@+id/myview"  
  3.     ...  
  4.     android:elevation="2dp"  
  5.     android:background="@drawable/myrect" />  
  1. <!-- res/drawable/myrect.xml -->  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"  
  3.        android:shape="rectangle">  
  4.     <solid android:color="#42000000" />  
  5.     <corners android:radius="5dp" />  
  6. </shape>  


也可以通過代碼來創建一個outline:

  1. /* Get the size of the shape from resources. */  
  2. int shapeSize = getResources().getDimensionPixelSize(R.dimen.shape_size);  
  3.   
  4. /* Create a circular outline. */  
  5. mOutlineCircle = new Outline();  
  6. mOutlineCircle.setRoundRect(00, shapeSize, shapeSize, shapeSize / 2);  
  7.   
  8. /* Create a rectangular outline. */  
  9. mOutlineRect = new Outline();  
  10. mOutlineRect.setRoundRect(00, shapeSize, shapeSize, shapeSize / 10);  

給視圖設置一個outline(如果爲了防止一個視圖產生陰影可以設置outline爲null):

  1. floatingShape.setOutline(mOutlineCircle);  

上面的方法在Android L5.0正式版中已經被替換,下面我再介紹以下Android L5.0設置outline的方法:

[java] view plain copy
 print?
  1. ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {  
  2.     @Override  
  3.     public void getOutline(View view, Outline outline) {  
  4.         int size = getResources().getDimensionPixelSize(R.dimen.fab_size);  
  5.         outline.setOval(00, size, size);  
  6.     }  
  7. };  
  8. fab.setOutlineProvider(viewOutlineProvider);  



下圖是使用不同eleavation值產生的陰影效果:



下圖是不同背景/輪廓產生的陰影和拖拽效果:

    


Drawable Tinting(着色)


對於Android L還有一個獨特的特點就是現在可以定義圖片的alpha遮罩,並且可以輕鬆的使用android:tint屬性去調整色調。


下面是一個使用tint屬性給背景調整不同顏色的例子:

  1. <LinearLayout  
  2.     android:orientation="horizontal"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:layout_gravity="center_horizontal">  
  6.     <ImageView  
  7.         ...  
  8.         android:src="@drawable/xamarin_white"  
  9.         android:background="@drawable/mycircle"/>  
  10.     <ImageView  
  11.         ...  
  12.         android:src="@drawable/xamarin_white"  
  13.         android:background="@drawable/mycircle"  
  14.         android:tint="#2C3E50"/>  
  15.     <ImageView  
  16.         ...  
  17.         android:src="@drawable/xamarin_white"  
  18.         android:background="@drawable/mycircle"  
  19.         android:tint="#B4BCBC"/>  
  20. </LinearLayout>  

效果圖:






Clipping Views(裁剪視圖)


可以使用View.setClipToOutline方法去剪切一個視圖的outline區域。

只有rectangle,circle, 和round rectangle outlines支持裁剪(Outline.canClip方法用來判斷是否可以裁剪)


爲了裁剪一個可繪製的視圖形狀,需要先設置一個outline然後調用View.setClipToOutline方法:

  1. floatingShape.setClipToOutline(true);  


下面請看一個使用裁剪的例子:

  1. int margin = Math.min(clippedView.getWidth(), clippedView.getHeight()) / 10;  
  2. Outline mClip = new Outline();  
  3. mClip.setRoundRect(margin, margin, clippedView.getWidth() - margin,  
  4.         clippedView.getHeight() - margin, margin / 2);  
  5. /* Sets the Outline of the View. */  
  6. clippedView.setOutline(mClip);  
  7. /* Enables clipping on the View. */  
  8. clippedView.setClipToOutline(true);  
首先創建一個輪廓,給輪廓設置區域大小,添加輪廓到視圖上,確認裁剪,效果圖如下:

     

因爲裁剪視圖是一個很耗資源的操作,所以當裁剪一個視圖時不要添加動畫(爲了達到這個效果可以使用Reveal Effect動畫,動畫篇會介紹)。



***********************************************************************************************************************************************************************************



UI控件

在Android L中新增了兩個控件分別是RecyclerViewCardView


RecyclerView:


RecyclerView是ListView的升級版,它提供了更好的性能而且更容易使用。




RecyclerView這個控件是一個可以裝載大量的視圖集合,並且可以非常效率的進行回收和滾動。當你list中的元素經常動態改變時可以使用RecyclerView控件。

RecyclerView非常容易使用,它提供瞭如下兩個功能:

爲每個條目位置提供了layout管理器(RecyclerView.setLayoutManager

爲每個條目設置了操作動畫(RecyclerView.setItemAnimator


下面的例子介紹瞭如何定義和使用一個RecyclerView

1.在佈局文件中添加一個RecyclerView

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <!-- A RecyclerView with some commonly used attributes -->  
  2. <android.support.v7.widget.RecyclerView  
  3.     android:id="@+id/my_recycler_view"  
  4.     android:scrollbars="vertical"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"/>  


2.初始化RecyclerView參數,設置layoutManager和adapter

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. public class MyActivity extends Activity {  
  2.     private RecyclerView mRecyclerView;  
  3.     private RecyclerView.Adapter mAdapter;  
  4.     private RecyclerView.LayoutManager mLayoutManager;  
  5.   
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.my_activity);  
  10.         mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);  
  11.   
  12.         // improve performance if you know that changes in content  
  13.         // do not change the size of the RecyclerView  
  14.         mRecyclerView.setHasFixedSize(true);  
  15.   
  16.         // use a linear layout manager  
  17.         mLayoutManager = new LinearLayoutManager(this);  
  18.         mRecyclerView.setLayoutManager(mLayoutManager);  
  19.   
  20.         // specify an adapter (see also next example)  
  21.         mAdapter = new MyAdapter(myDataset);  
  22.         mRecyclerView.setAdapter(mAdapter);  
  23.     }  
  24.     ...  
  25. }  

3.創建一個adapter

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {  
  2.     private String[] mDataset;  
  3.   
  4.     // Provide a reference to the type of views that you are using  
  5.     // (custom viewholder)  
  6.     public static class ViewHolder extends RecyclerView.ViewHolder {  
  7.         public TextView mTextView;  
  8.         public ViewHolder(TextView v) {  
  9.             super(v);  
  10.             mTextView = v;  
  11.         }  
  12.     }  
  13.   
  14.     // Provide a suitable constructor (depends on the kind of dataset)  
  15.     public MyAdapter(String[] myDataset) {  
  16.         mDataset = myDataset;  
  17.     }  
  18.   
  19.     // Create new views (invoked by the layout manager)  
  20.     @Override  
  21.     public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,  
  22.                                                    int viewType) {  
  23.         // create a new view  
  24.         View v = LayoutInflater.from(parent.getContext())  
  25.                                .inflate(R.layout.my_text_view, parent, false);  
  26.         // set the view's size, margins, paddings and layout parameters  
  27.         ...  
  28.         ViewHolder vh = new ViewHolder(v);  
  29.         return vh;  
  30.     }  
  31.   
  32.     // Replace the contents of a view (invoked by the layout manager)  
  33.     @Override  
  34.     public void onBindViewHolder(ViewHolder holder, int position) {  
  35.         // - get element from your dataset at this position  
  36.         // - replace the contents of the view with that element  
  37.         holder.mTextView.setText(mDataset[position]);  
  38.   
  39.     }  
  40.   
  41.     // Return the size of your dataset (invoked by the layout manager)  
  42.     @Override  
  43.     public int getItemCount() {  
  44.         return mDataset.length;  
  45.     }  
  46. }  


CardView:


CardView繼承自FrameLayout,允許你在card視圖中顯示信息. CardView也可以設置陰影和圓角。(其實現在很多應用都自定義了Card視圖,Google這回將card視圖作爲基本控件,可以拿來直接使用了)





Layout中爲CardView設置圓角使用card_view:cardCornerRadius屬性

代碼中爲CardView設置圓角使用CardView.setRadius方法

CardView設置背景顏色使用card_view:cardBackgroundColor屬性


在佈局中包含一個CardView,如下:

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <!-- A CardView that contains a TextView -->  
  2. <android.support.v7.widget.CardView  
  3.     xmlns:card_view="http://schemas.android.com/apk/res-auto"  
  4.     android:id="@+id/card_view"  
  5.     android:layout_gravity="center"  
  6.     android:layout_width="200dp"  
  7.     android:layout_height="200dp"  
  8.     card_view:cardCornerRadius="4dp">  
  9.   
  10.     <TextView  
  11.         android:id="@+id/info_text"  
  12.         android:layout_width="match_parent"  
  13.         android:layout_height="match_parent" />  
  14. </android.support.v7.widget.CardView>  

兼容性:

RecyclerViewCardView都包含在Android L Developer Preview Support Library中,所以他們可以在之前的版本中使用,只會有一些限制。



***********************************************************************************************************************************************************************************



Material 動畫

在Android L中新增瞭如下幾種動畫:

  • Touch feedback(觸摸反饋)
  • Reveal effect(揭露效果)
  • Activity transitions(Activity轉換效果)
  • Curved motion(曲線運動)
  • View state changes (視圖狀態改變)
  • Animate Vector Drawables(可繪矢量動畫)

這篇文章先介紹上面6種中比較常用前三種,由於後三種現在資料不多,而且好像不是特別常用,等我研究明白了再給補上。



觸摸反饋:


在Android L5.0中加入了觸摸反饋動畫。

其中最明顯,最具代表性的就是波紋動畫,比如當點擊按鈕時會從點擊的位置產生類似於波紋的擴散效果。


波紋效果(Ripple):


當你使用了Material主題後,波紋動畫會自動應用在所有的控件上,我們當然可以來設置其屬性來調整到我們需要的效果。


可以通過如下代碼設置波紋的背景:

android:background="?android:attr/selectableItemBackground"波紋有邊界

android:background="?android:attr/selectableItemBackgroundBorderless"波紋超出邊界


使用效果如下:

B1是不設任何背景的按鈕

B2設置了?android:attr/selectableItemBackground

B3設置了?android:attr/selectableItemBackgroundBorderless




設置顏色


我們也可以通過設置xml屬性來調節動畫顏色,從而可以適應不同的主題:

android:colorControlHighlight:設置波紋顏色

android:colorAccent:設置checkbox等控件的選中顏色


比如下面這個比較粉嫩的主題,就需要修改動畫顏色來匹配(如何設置主題顏色請參考該系列第一篇文章):






Circular Reveal:


Circular Reveal是一個Android L新增的動畫效果,但我始終不知道如何翻譯這個名字,圓形揭示?

使用方法:


應用ViewAnimationUtils.createCircularReveal()方法可以去創建一個RevealAnimator動畫


ViewAnimationUtils.createCircularReveal源碼如下:

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. public static Animator createCircularReveal(View view,  
  2.         int centerX,  int centerY, float startRadius, float endRadius) {  
  3.     return new RevealAnimator(view, centerX, centerY, startRadius, endRadius);  
  4. }  
源碼非常簡單,就是通過createCircularReveal方法根據5個參數來創建一個RevealAnimator動畫對象。

這五個參數分別是:
view 操作的視圖
centerX 動畫開始的中心點X
centerY 動畫開始的中心點Y
startRadius 動畫開始半徑
startRadius 動畫結束半徑

根據下面的效果圖和代碼可以很容易的瞭解這幾個參數的作用:




[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. final View oval = this.findViewById(R.id.oval);  
  2. oval.setOnClickListener(new View.OnClickListener() {  
  3.     @Override  
  4.     public void onClick(View v) {  
  5.         Animator animator = ViewAnimationUtils.createCircularReveal(  
  6.                 oval,  
  7.                 oval.getWidth()/2,  
  8.                 oval.getHeight()/2,  
  9.                 oval.getWidth(),  
  10.                 0);  
  11.         animator.setInterpolator(new AccelerateDecelerateInterpolator());  
  12.         animator.setDuration(2000);  
  13.         animator.start();  
  14.     }  
  15. });  
  16.   
  17. final View rect = this.findViewById(R.id.rect);  
  18.   
  19. rect.setOnClickListener(new View.OnClickListener() {  
  20.     @Override  
  21.     public void onClick(View v) {  
  22.         Animator animator = ViewAnimationUtils.createCircularReveal(  
  23.                 rect,  
  24.                 0,  
  25.                 0,  
  26.                 0,  
  27.                 (float) Math.hypot(rect.getWidth(), rect.getHeight()));  
  28.         animator.setInterpolator(new AccelerateInterpolator());  
  29.         animator.setDuration(2000);  
  30.         animator.start();  
  31.     }  
  32. });  


總結:


RevealAnimator和之前的動畫使用沒什麼區別,同樣可以設置監聽器和加速器來實現各種各樣的特效。

這些效果常用在視圖的添加,刪除,狀態,大小改變的時候,以後我會寫一個更直觀詳細的例子。






Activity Transition:



Activity Transition是Material Design中提供的一種動畫效果。它通過運動和切換不同狀態之間的元素來產生各種動畫效果。


簡介:


Activity Transition提供了種Transition類型:

Enter(進入):進入一個Activity的效果
Exit(退出):退出一個Activity的效果


而這每種類型又分爲普通Transition和共享元素Transition:


<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">普通</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">Transition</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">:</span>
<span style="font-family: Arial, Helvetica, sans-serif;">explode:從場景的中心移入或移出
slide:從場景的邊緣移入或移出
fade:調整透明度產生漸變效果</span>


<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">Shared Elements Transition 共享元素轉換:</span>

它的作用就是共享兩個acitivity種共同的元素,在Android 5.0下支持如下效果:

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

changeClipBounds - 裁剪目標視圖邊界

changeTransform - 改變目標視圖的縮放比例和旋轉角度

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


下面是我寫的一個小演示Demo,相信大家看後就知道這幾個動畫是如何工作的了:





Activity Transition使用 


使用Activity Transition十分簡單,只需要如下兩個步驟:

步驟一:設置允許使用transition,並且設置transition


xml:

首先,如果要使用transition需要先修改style文件,在繼承了material主題的style.xml中添加如下屬性:

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <style name="myTheme" parent="android:Theme.Material">  
  2.         <!-- 允許使用transitions -->  
  3.         <item name="android:windowContentTransitions">true</item>  
  4.   
  5.         <!-- 指定進入和退出transitions -->  
  6.         <item name="android:windowEnterTransition">@transition/explode</item>  
  7.         <item name="android:windowExitTransition">@transition/explode</item>  
  8.   
  9.         <!-- 指定shared element transitions -->  
  10.         <item name="android:windowSharedElementEnterTransition">  
  11.             @transition/change_image_transform</item>  
  12.         <item name="android:windowSharedElementExitTransition">  
  13.             @transition/change_image_transform</item>  
  14. </style>  

下面再來看看如何定義transition動畫:

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <explode/>  
  3.     <changeBounds/>  
  4.     <changeTransform/>  
  5.     <changeClipBounds/>  
  6.     <changeImageTransform/>  
  7. </transitionSet>  
transition裏面的元素就是之前介紹過的,使用方法和以前的AnimationSet差不多,具體如何使用大家可以參考官方文檔。


代碼:

在代碼中同樣可以完成對於transition的設置:

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. // 允許使用transitions  
  2. getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);  
  3.   
  4. // 設置一個exit transition  
  5. getWindow().setExitTransition(new Explode());  


可以通過如下方法在代碼總設置transition效果:

Window.setEnterTransition():普通transition的進入效果

Window.setExitTransition():普通transition的退出效果

Window.setSharedElementEnterTransition():共享元素transition的進入效果

Window.setSharedElementExitTransition():共享元素transition的退出效果



步驟二:啓動Activity:


當你已經設置了允許使用Transition並設置了Transition動畫,你就可以通過ActivityOptions.makeSceneTransitionAnimation()方法啓動一個新的Activity來激活這個Transition:


啓用普通的Transition:

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. startActivity(intent,  
  2.               ActivityOptions.makeSceneTransitionAnimation(this).toBundle());  


啓用共享元素Transition:

啓動shared element transition和普通的transition稍有不同

在所有需要共享視圖的Activity中,使用android:transitionName屬性對於需要共享的元素分配一個通用的名字。

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. Intent intent = new Intent(this, Activity2.class);  
  2. // shareView: 需要共享的視圖  
  3. // "shareName": 設置的android:transitionName="shareName"  
  4. ActivityOptions options = ActivityOptions  
  5.         .makeSceneTransitionAnimation(this, shareView, "shareName");  
  6. startActivity(intent, options.toBundle());</span>  
如果有多個View需要共享,則通過Pair.create()方法創建多個匹配對然後傳入ActivityOptions.makeSceneTransitionAnimation。代碼如下:
[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,  
  2.         Pair.create(view1, "agreedName1"),  
  3.         Pair.create(view2, "agreedName2"));  


如果不想使用transition可以設置options bundle爲null。

當需要結束當前Activity並回退這個動畫時調用Activity.finishAfterTransition()方法



兼容性:


上面介紹的幾個新動畫的APIs只允許在Android L中使用:

  • Activity transitions
  • Touch feedback
  • Reveal animations

所以爲了兼容早期版本,則需要在調用這些api的時候先進行檢查系統版本。



寫在最後:


我將Material Design分爲如下四部分:

主題和佈局——ANDROID L——Material Design詳解(主題和佈局)

視圖和陰影——ANDROID L——Material Design詳解(視圖和陰影)

UI控件——ANDROID L——Material Design詳解(UI控件)

動畫——ANDROID L——Material Design詳解(動畫篇)


十一放假回來開始學習Android L,連更了6篇文章終於把Material Design中大部分特性介紹完畢(動畫篇還剩幾個小內容,過幾天研究明白了再給補上)


接下來準備寫幾個小例子,把視圖陰影,動畫和新增的UI控件充分結合起來。

ANDROID L——Material Design綜合應用(Demo)


Android 5.0真的做出了很大的變化,有一種脫胎換骨的感覺,但說實話模擬器用的真心不爽,啥時候Genymotion可以支持5.0啊。。。



發佈了38 篇原創文章 · 獲贊 25 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章