編輯:關於Android編程
Android 2.0之後可以通過overridePendingTransition()給Activity增加切換動畫.而在Android5.X中,Google對動畫效果進行了更深一步的诠釋,為Activity的跳轉設計了更加豐富的動畫效果。
建議拖到 “效果圖的具體實現代碼”,將代碼運行一遍,再重新看原理,速度就會快很多。
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMyBpZD0="android-5x提供了三種transition類型">Android 5.X提供了三種Transition類型
例如從MainActivity跳轉到Main2ActivityB,只需要在MainActivity中將基本的startActivity(intent)方法改成如下代碼:
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
而在Main2Activity中,只需要設置如下所示代碼:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);//這句要寫在setContentView()前,具體原因到時再補充
或
- true
接下來就可以設置進入動畫,在Main2Activity設置,代碼如下:
//同樣,都是要寫在setContentView()前面 getWindow().setEnterTransition(new Explode()); getWindow().setEnterTransition(new Slide()); getWindow().setEnterTransition(new Fade());
退出動畫設置為,代碼如下:
//同樣,都是要寫在setContentView()前面 getWindow().setExitTransition(new Explode()); getWindow().setExitTransition(new Slide()); getWindow().setExitTransition(new Fade());
第一章圖片中的Android機器人就是共享元素,即Activity1與Activity2都擁有的元素,在Activity1跳轉到Activity2的時候,其他元素消失,而共享元素——Android機器人通過動畫效果直接顯示到Activity2中。
所以,要想在程序中使用共享元素的動畫效果,需要再Activity1的布局文件中設置共享元素,即給對應控件增加相關屬性,代碼如下:
android:transitionName="XXX"
同時在Activity2的布局文件中,給要實現共享效果的元素也增加相同的屬性,代碼如下:
android:transitionName="XXX"
如果只有一個共享元素,Activity1中只需要使用如下代碼:
//view為共享元素,share為指定transitionName="XXX"對應的XXX startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, view,"share")).toBundle());
如果有多個共享屬性,可以通過Pair.create()來創建多個共享元素,代碼如下:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view,"share"),Pair.create(fab,"fab")).toBundle());
到這裡所有的步驟就完成。
“跳轉按鈕”是Android2.0使用overridePendingTransition()的實現,所以以下代碼不會給出..
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //如果報錯就在每個方法前加上@TargetApi(Build.VERSION_CODES.LOLLIPOP),主要是為了防止版本太低 public void explode(View v) { Intent intent = new Intent(this, Main2Activity.class); intent.putExtra("flag", 0); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle()); } public void slide(View v) { Intent intent = new Intent(this, Main2Activity.class); intent.putExtra("flag", 1); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle()); } public void fade(View view) { Intent intent = new Intent(this, Main2Activity.class); intent.putExtra("flag", 2); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle()); } public void share(View view) { Toast.makeText(MainActivity.this, "aaaaa", Toast.LENGTH_SHORT).show(); View fab = findViewById(R.id.fab_button); Intent intent = new Intent(this, Main2Activity.class); intent.putExtra("flag", 3); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, Pair.create(view,"share"),Pair.create(fab,"fab")).toBundle()); } }
但其實在MainActivity的xml中,transitionName其實不設置代碼也是沒問題的,有興趣可以去試試。因為在MainActivity的代碼的ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, Pair.create(view,”share”),Pair.create(fab,”fab”)).toBundle())中,view與fab 其實就是那兩個Button。
public class Main2Activity extends AppCompatActivity { @TargetApi(Build.VERSION_CODES.LOLLIPOP) @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://explode getWindow().setEnterTransition(new Explode()); getWindow().setExitTransition(new Explode()); break; case 1://slide getWindow().setEnterTransition(new Slide()); getWindow().setExitTransition(new Slide()); break; case 2://fade getWindow().setEnterTransition(new Fade()); getWindow().setExitTransition(new Fade()); break; case 3://不用任何操作 break; } setContentView(R.layout.activity_main2); } }
Windows Manager是一款窗口管理終端,可以遠程連接到Linux的X桌面進行管理,與服務器端產生一個session相互通信。最近在網上看見一個人在烏
Broadcast Receiver簡介 Broadcast Receiver是Android的五大組件之一,使用頻率也很高。 用於異步接收廣播Intent,廣播Inte
本文實例講述了Android利用Intent實現數據傳遞的方法。分享給大家供大家參考,具體如下:在Android開發過程中,很多人都熟悉Intent,這是個用於在多個Vi
還是我們自定View的那幾個步驟:1、自定義View的屬性2、在View的構造方法中獲得我們自定義的屬性[ 3、重寫onMesure ]4、重寫onDraw1、自定義屬性
作為一名Android開發者,相信你對Android方法數不能超過65K