十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

      通過shared element transition實現同種元素視圖間的切換效果

      百恒網絡 2017-08-18 8165

      南昌APP開發中,shared element transition(又稱為hero transition)是material design中引入的另一新動畫特效。 它適用于一種特殊場景:兩個待切換視圖顯示同樣一些元素。 這是一種常見的交互模式:點擊一個元素,彈出新的視圖顯示元素明細。

      對于兩個展示相同元素的視圖,其間的任何動畫切換場景都可以使用shared element transition 來實現。圖1中,右邊的大圖片和左邊的小圖片是同一張圖。這張圖就是個shared element。

      放大版照片視圖

      圖1 放大版照片視圖

      在Lollipop中,Android有辦法實現activity或fragment間的動畫切換。圖2是動畫過程中的一副截圖,可大致看出實現效果。現在南昌APP制作開發公司小編就來帶大家看一看如何把這種動畫應用于activity。

      shared element的變換

      圖2 shared element的變換

      實現activity間的動畫切換涉及以下三個步驟:

      1、打開activity transition;

      2、為每個shared element視圖設置transition名值;

      3、啟動帶ActivityOptions(觸發動畫)的activity。

      首先是打開activity transition。如果你的activity使用了AppCompat主題,這個步驟可以直接跳過。(AppCompat繼承Material主題,會自動為你打開activity transition。)

      在CriminalIntent的例子中,為了讓目標activity擁有透明背景,我們使用了@android:style/ Theme.Translucent.NoTitleBar主題樣式。這個主題沒有繼承Material主題,所以需要手工打開activity transition。有兩種方式可以打開activity transition,先來看如何用代碼打開它。

      以代碼的方式打開activity transition

      @Override

      public void onCreate(Bundle savedInstanceState) {

      getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);

      super.onCreate(savedInstanceState);

      ...

      }

      另外一種方式是修改activity的樣式,設置android:windowActivityTransitions屬性值為 true。

      在樣式里打開activity transition


      再來看如何為shared element視圖設置transition名值。Android在API 21中為View引入了 transitionName屬性。所以,可以在布局或代碼中設置這個屬性值。兩種方式各有其適用的場景,具體問題具體分析。本例中,我們在布局XML文件里,將android:transitionName屬性設 置為image,如圖3所示。


      圖3 設置android:transitionName屬性值為image

      然后,再定義一個startWithTransition(...)靜態方法,為視圖設置transition名稱,如下代碼1所示。

      定義startWithTransition(...)方法

      public static void startWithTransition(Activity activity, Intent intent,

      View sourceView) {

      ViewCompat.setTransitionName(sourceView, "image");

      ActivityOptionsCompat options = ActivityOptionsCompat

      .makeSceneTransitionAnimation(activity, sourceView, "image");

      activity.startActivity(intent, options.toBundle());

      }

      Android舊版本系統中,View視圖沒有setTransitionName(String)屬性方法。所以,需要使用ViewCompat.setTransitionName(View, String)方法設置TransitionName。 在代碼清單1中,作為三個步驟的后一步,我們使用ActivityOptions對象,讓操作系統知道shared element是什么,以及使用哪個transitionName值。

      當然,transition和shared element transition能做的遠不止這些。例如,它們還可以用于fragment間的動畫切換。這里就不多做說明了,想了解更多關于南昌APP開發方面的相關技術,歡迎訪問百恒網絡網站,更多相關專業技術知識與您分享,相信您一定會有收獲!


      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

      歡迎您的光顧,我們將竭誠為您服務×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      亚洲av日韩精品久久久久久a| 正在播放国产精品放孕妇| 亚洲欧美日韩中文字幕一区二区三区 | 国产精品久久无码一区二区三区网| 99re6在线视频精品免费下载 | 国产成人午夜精品免费视频| 337p日本欧洲亚洲大胆精品555588 | 日产精品久久久久久久| 亚洲国产精品无码久久久不卡| 99精品久久精品一区二区| 久久国产热这里只有精品| 亚洲精品无码专区久久同性男| 亚洲欧美日韩中文无线码| 国产成人一区二区动漫精品| 国产精品无码AV不卡| 97香蕉久久夜色精品国产| 网友自拍区视频精品| 亚洲国产日韩综合久久精品| 国内精品-bt天堂| 91精品视频播放| 亚洲国产精品无码久久SM| 国产精品国产三级国产av品爱网| 国产精品亚洲一区二区三区在线| a级精品九九九大片免费看| 国产午夜精品一二区理论影院 | 亚洲人成精品久久久久| 国产香蕉国产精品偷在线| 国产精品亚洲mnbav网站| 国产高清国内精品福利99久久| 国产精品无码一区二区在线观一 | 亚洲αv在线精品糸列| 国产精品后入内射日本在线观看| 亚洲AV永久精品爱情岛论坛| 亚洲AV永久无码精品成人| 久久亚洲美女精品国产精品| 99热在线精品免费播放6| 亚洲精品中文字幕无码AV| 久久精品国产亚洲AV蜜臀色欲 | 日韩亚洲国产高清免费视频| 日韩视频免费一区二区三区| 狠狠热精品免费观看|