900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Activity与Fragment的转场动画.

Activity与Fragment的转场动画.

时间:2023-01-05 11:32:03

相关推荐

Activity与Fragment的转场动画.

因为要新增一个页面,突然想试试转场动画,做完以后还是做个笔记,防止以后忘记了不好找…

1. Activity与Activity的转场动画

5.0以上才行,但是如果手机没有5.0则会执行默认普通情况

1.1普通的3种Activity过渡动画

有3种效果,分别是:

explode(分解) – 从屏幕中间进来或出去,移动视图slide(滑动) – 从屏幕边缘进来或出去,移动视图fade(淡出) – 改变屏幕视图的不透明度来添加或移除视图

举个栗子:

ActivityA跳转到ActivityB

ActivityA的跳转方法

startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

ActivityB的设置

在ActivityB的onCreate()生命周期的setContentView()之前设置:

getWindow().requestFeature(Window.FRATURE_CONTENT_TRANSITIONS);

在style文件内添加属性

<item name="android:windowContentTransitions">true</item>

同时根据需要的的过渡动画进行设置

(设置在getWindow().requestFeature()方法之后,setContentView()方法之前)

getWindow().setEnterTransition(new Explode());getWindow().setEnterTransition(new Slide());getWindow().setEnterTransition(new Fade());

1.2 共享元素的Activity的转场动画

这种才叫高端,这种看起来才cooooool..

共享元素包括:

changeBounds: 改变视图的位置和大小changeClipBounds:裁剪目标视图边界changeTransform: 改变目标视图的缩放和旋转changeImageTransform: 改变图片的大小和缩放

还是举个栗子:

比如说2个Activity共享一个Button.

那么需要在2个Activity的Button上面同时添加

android:transitionName = "xxx";

切记2个Activity的Button的这个属性的值得一致.

最后在ActivityA跳转到ActivityB时:

startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this,共享的组件,"约定好的那个属性名").toBundle());

如果需要共享多个元素,那么就是用Pair.create()来创建多个元素

startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this,Pair.create(共享组件1,"约定好的属性名1"),Pair.create(共享组件2,"约定好的属性名2")).toBundle());

2.Fragment与Fragment之间的转场动画(共享元素)

/p/e9f63ead8bf5

借鉴的是这个.

举个简单粗暴的栗子:

共享元素之间同时添加约定好的

android:transitionName = "xxx";

创建好需要跳转的Fragment ==> XXFragment

XXFragment fragment =new XXFragment();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {detailFragment.setSharedElementEnterTransition(new DetailTransition());setExitTransition(new Fade());fragment.setEnterTransition(new Fade());fragment.setSharedElementReturnTransition(new DetailTransition());}getActivity().getSupportFragmentManager().beginTransaction().addSharedElement(共享组件,"约定好的属性名").replace(Activity的容器id, fragment).addToBackStack(null).commit();}

自定义动画:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)public class DetailTransition extends TransitionSet {public DetailTransition() {init();}// 允许资源文件使用public DetailTransition(Context context, AttributeSet attrs) {super(context, attrs);init();}private void init() {setOrdering(ORDERING_TOGETHER);addTransition(new ChangeBounds()).addTransition(new ChangeTransform()).addTransition(new ChangeImageTransform());}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。