Android5.0:Activity過渡動畫
阿新 • • 發佈:2018-11-30
Android 在5.0(API 級別 21)中提供了三種Transition 型別
進入:一個進入的過渡動畫決定Activity中的所有的檢視怎麼進入螢幕
退出:一個退出的過渡動畫決定一個Activity中的所有檢視怎麼退出螢幕
共享元素:一個共享因素過渡動畫決定兩個Activities之間的過渡,怎麼共享它們的檢視
進入和退出的效果包括:
1.explode(分解)-----從螢幕中間進入或退出,移動檢視
2.slide(滑動)---------從螢幕邊緣進入或退出,移動檢視
3.fade(淡出)---------通過改變螢幕上檢視的不透明度達到新增或移除檢視
共享元素包括:
1.changeBounds -------改變目標檢視的佈局邊界
2.changeClipBounds ------裁剪目標檢視邊界
3.changeTransform --------改變目標檢視的縮放比例和旋轉角度
4.changeImageTransform -----改變目標圖片的大小和縮放比例
效果圖如下:
如何使用過渡動畫:
1.比如從ActivityA跳轉到ActivityB
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
2.ActivityB中
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
3.在ActivityB中寫具體的進入的動畫效果
getWindow().setEnterTransition(new Explode());
getWindow().setEnterTransition(new Slide());
getWindow().setEnterTransition(new Fade());
4.在ActivityB中設定離開ActivityB的動畫
getWindow().setExitTransition(new Explode()) getWindow().setExitTransition(new Slide()); getWindow().setExitrTransition(new Fade());
5.共享元素的設定:
首先給要共享的元素設定屬性 AB兩個活動中都要設定
android:transitionName="xxx"
啟動方式
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle());
多個元素共享的書寫方式
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view,"share"),Pair.create(fab,"fab")).toBundle());
6.實列程式碼:
活動A程式碼以及佈局
package com.example.a37443.trasition;
import android.app.ActivityOptions;
import android.content.Intent;
import android.provider.Contacts;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Pair;
import android.view.View;
public class MainActivity extends AppCompatActivity {
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onclick(View view){
switch(view.getId()){
case R.id.btn_1:
intent = new Intent(this,Main2Activity.class);
intent.putExtra("flag",0);
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
break;
case R.id.btn_2:
intent = new Intent(this,Main2Activity.class);
intent.putExtra("flag",1);
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
break;
case R.id.btn_3:
Intent intent = new Intent(this,Main2Activity.class);
intent.putExtra("flag",2);
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
break;
case R.id.fab_button:
View fab = findViewById(R.id.fab_button);
intent = new Intent(this,Main2Activity.class);
intent.putExtra("flag",3);
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle());
break;
default:
break;
}
}
}
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_1"
android:layout_width="match_parent"
android:layout_height="100dp"
android:onClick="onclick"
android:text="explode"/>
<Button
android:id="@+id/btn_2"
android:layout_width="match_parent"
android:layout_height="100dp"
android:onClick="onclick"
android:text="slide" />
<Button
android:id="@+id/btn_3"
android:layout_width="match_parent"
android:layout_height="100dp"
android:onClick="onclick"
android:text="fade"/>
<Button android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fab_button"
android:onClick="onclick"
android:transitionName="fab"
android:background="@drawable/icon_person"
android:elevation="5dp"/>
</LinearLayout>
活動B程式碼以及佈局:
package com.example.a37443.trasition;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.transition.Explode;
import android.transition.Fade;
import android.transition.Slide;
import android.view.Window;
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
int flag = getIntent().getExtras().getInt("flag");
switch (flag){
case 0:
getWindow().setEnterTransition(new Explode());
break;
case 1:
getWindow().setEnterTransition(new Slide());
break;
case 2:
getWindow().setEnterTransition(new Fade());
getWindow().setExitTransition(new Fade());
case 3:
break;
}
setContentView(R.layout.activity_main2);
}
}
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/holder_view"
android:layout_width="match_parent"
android:layout_height="300dp"
android:transitionName="share"
android:background="@drawable/icon_person">
</View>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="10dp"
android:layout_below="@+id/holder_view">
<Button
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/button"
android:layout_below="@+id/button4"
android:layout_marginTop="10dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="10dp"
android:id="@+id/button4"
android:layout_alignParentStart="true"/>
</RelativeLayout>
</RelativeLayout>
學習路上且行且記錄~