CircularReveal
這種動畫比較簡單,定義一個布局,比如本示例中定義一個ImageView,然后在OnClickListener方法中插入如下代碼片段
/*本例的ImageView是一個正方形圖片*/
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Animator animator = ViewAnimationUtils.createCircularReveal(
imageView,0,0,0,(float)Math.hypot(imageView.getWidth(),imageView.getHeight())
);
/*這里面的五個參數(shù)分別是操作視圖,開始點x和y,開始和結束半徑*/
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(3000);
animator.start();
}
});
共享元素漸變
這種動畫比較復雜,首先你的SDK版本必須大于21。
- 在V21style文件中重寫你的主題,讓主題支持共享元素動畫
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowEnterTransition">@android:transition/move</item>
<item name="android:windowExitTransition">@android:transition/move</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
<item name="android:activityCloseExitAnimation">@anim/exit</item>
<item name="android:activityCloseEnterAnimation">@anim/exit</item>
</style>
</resources>
- 在布局文件中添加transitionName屬性,兩個共享的元素名字必須相同,可以在String中定義
<Button
android:id="@+id/button2"
android:text="共享元素漸變"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:transitionName="@string/transitonButton"/>
- 在第一個A Activity中實現(xiàn)以下方法。
方法名是A Activity里的一個按鈕點擊事件。
注釋中是實現(xiàn)多個共享元素漸變的方法,導入的Pair必須是V4包的。
public void Animation1(View v){
Intent intent = new Intent(this,Animation1.class);
/*ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this,
new Pair<View, String>(imageView, "moiveImg"), new Pair<View, String>(button, "actorText"));
ActivityCompat.startActivity((Top250) context, intent, options.toBundle());*/
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,button,"Button");
startActivity(intent,options.toBundle());
}
- 在目標Activity中實現(xiàn)下面的方法,即跳轉到的Activity
ActivityOptions.makeSceneTransitionAnimation(this, button, "Button");