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之间的转场动画(共享元素)

http://www.jianshu.com/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());
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值