Android ActivityOptions动画

来源:互联网 发布:java 最大公约数 编辑:程序博客网 时间:2024/05/20 19:30

Android ActivityOptions动画

Android5.0提供了新的过渡动画,为了兼容以前版本,我们需要导入“com.android.support:appcompat-v7”。

要实现这些动画,Activity必须指定theme,继承Theme.AppCompat.Light
<style name="ActivityOptionsTheme" parent="Theme.AppCompat.Light"></style>
同时在Activity中调用
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS)
ActivityOptionsCompat提供了五种不同的方式来实现动画,不过makeSceneTransitionAnimation方法只在5.0版本以上的系统上才能显示。

1、makeCustomAnimation(Context context, int enterResId, int exitResId)

设置自定义的Activity动画,出入的是动画资源的id。
enterResId和exitResId分别指定进入动画和退出动画。

ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeCustomAnimation(this, R.anim.anim_enter_from_bottom, R.anim.anim_alpha);ActivityCompat.startActivity(this, new Intent(this, ActivityOptionsOpenActivity.class),activityOptions.toBundle());

2、makeScaleUpAnimation(View source, int startX, int startY, int startWidth, int startHeight)

新的Activity从某个位置以某个大小出现,然后慢慢拉伸渐变到整个屏幕。
startX和startY指定开始位置, 而startWidth和startHeight指定初始宽高。

ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeScaleUpAnimation(mSharedView, 0, 0, 100, 100);ActivityCompat.startActivity(this, new Intent(this, ActivityOptionsOpenActivity.class),activityOptions.toBundle());

3、makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY)

一个bitmap慢慢从某个位置拉伸渐变新的activity
thumbnail指定初始图片,startX和startY指定开始位置。

ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeThumbnailScaleUpAnimation(mSharedView, BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), 0, 0);ActivityCompat.startActivity(this, new Intent(this, ActivityOptionsOpenActivity.class),activityOptions.toBundle());

4、makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)

用于两个Activity的两个View协作动画
(1) 配置文件中添加transitionName属性

<Viewandroid:id="@+id/view_content"android:layout_width="match_parent"android:layout_height="200dp"android:background="@drawable/tweened"android:transitionName="picture"/>
(2) makeSceneTransitionAnimation方法
在调用时指定初始View和transitionName,
ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(this, mSharedView, "picture");ActivityCompat.startActivity(this, new Intent(this, ActivityOptionsOpenActivity.class),activityOptions.toBundle());
(3) 在第二个Activity的onBackPressed方法中添加
@Overridepublic void onBackPressed() {super.onBackPressed();ActivityCompat.finishAfterTransition(this);}

5、makeSceneTransitionAnimation(Activity activity, Pair<View, String>... sharedElements)

用于多个View协作动画
(1) 为不同的View添加transitionName

<RelativeLayoutandroid:layout_width="match_parent"android:layout_height="100dp"><Viewandroid:id="@+id/view_shared1"android:layout_width="100dp"android:layout_height="100dp"android:layout_alignParentLeft="true"android:background="@color/color_eed400"android:transitionName="robot1"/><Viewandroid:id="@+id/view_shared2"android:layout_width="100dp"android:layout_height="100dp"android:layout_alignParentRight="true"android:background="@color/color_ff7088"android:transitionName="robot"/></RelativeLayout>
(2) 调用makeSceneTransitionAnimation方法,创建不同的Pair实例
Intent intent = new Intent(this, ActivityOptionsSecondActivity.class);ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(this, Pair.create(mViewShared1, "robot1"), Pair.create(mViewShared2, "robot2"));ActivityCompat.startActivity(this, intent, activityOptions.toBundle());
(3) 在第二个Activity的onBackPressed方法中添加finishAfterTransition方法

参考资料:http://blog.csdn.net/qibin0506/article/details/48129139
参考资料:http://www.jianshu.com/p/6ad7864e005e

阅读全文
0 0