編輯:關於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);
}
}
通過案例分析Android WindowManager解析與騙取QQ密碼的過程
Windows Manager是一款窗口管理終端,可以遠程連接到Linux的X桌面進行管理,與服務器端產生一個session相互通信。最近在網上看見一個人在烏
Android中BroadcastReceiver(異步接收廣播Intent)的使用
Broadcast Receiver簡介 Broadcast Receiver是Android的五大組件之一,使用頻率也很高。 用於異步接收廣播Intent,廣播Inte
Android開發之利用Intent實現數據傳遞的方法
本文實例講述了Android利用Intent實現數據傳遞的方法。分享給大家供大家參考,具體如下:在Android開發過程中,很多人都熟悉Intent,這是個用於在多個Vi
android自定義view制作圓形進度條效果
還是我們自定View的那幾個步驟:1、自定義View的屬性2、在View的構造方法中獲得我們自定義的屬性[ 3、重寫onMesure ]4、重寫onDraw1、自定義屬性
android Unable toexecute dex: method ID not in [0, 0xffff]: 65536問題
作為一名Android開發者,相信你對Android方法數不能超過65K