Android学习之5.X过渡动画的实现

你是否对安卓现有的页面跳转动画觉得单一生硬呢?

Android 5.0中,Google对动画效果做了更深的诠释,为Activity的跳转设计更加丰富的动画效果。

看下效果图

这里写图片描述

由于不会Gif,这图是扣来的,但是我们就是来讲述这种效果是如何实现的

Android 5.X提供了三种Transition类型

进入:一个Activity的所有视图如何进入屏幕

退出:一个Activity的所有视图,如何退出屏幕

共享:一个共享元素过渡动画决定两个Activity之间的过渡,如何共享他们的视图

进入退出效果:

explode(分解)—-从屏幕中间进入或退出

slide(滑动)—-从屏幕边缘进入或退出,(包括状态栏)

fade(淡出)—-类似透明度渐变动画,通过改变透明度来进入或者退出视图

共享元素:

changeBounds —- 改变目标视图的布局边界

changeClipBounds —- 裁剪目标视图边界

changeTransform —–改变目标视图的缩放比例和旋转角度

changeImageTransform —- 改变目标图片的大小和缩放比例

实现方式:

Activity A:

  @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public void explode(View view){

        intent=new Intent(this,Transitions.class);
        intent.putExtra("flag",0);
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
    }
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public void slide(View view){

        intent=new Intent(this,Transitions.class);
        intent.putExtra("flag",1);
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
    }
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public void fade(View view){

        intent=new Intent(this,Transitions.class);
        intent.putExtra("flag",2);
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
    }
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public void normol(View view){

        intent=new Intent(this,Transitions.class);
        intent.putExtra("flag",3);
        startActivity(intent);
    }
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public void share(View view){

        intent=new Intent(this,Transitions.class);
        intent.putExtra("flag",4);
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle());
    }

这里为了比较,设置了explode,slide,fade,normol,share,五种过渡方式,大家可以看下实现的动画效果

Activity B:

 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
        int flag = getIntent().getExtras().getInt("flag");
        switch (flag) {
            case 0:
                Explode explode = new Explode();
                explode.setDuration(2000);
                getWindow().setEnterTransition(explode);
                getWindow().setExitTransition(explode);
                break;
            case 1:
                Slide slide=new Slide();
                slide.setDuration(2000);
                getWindow().setEnterTransition(slide);
                getWindow().setExitTransition(slide);
                break;
            case 2:
                Fade fade=new Fade();
                fade.setDuration(2000);
                getWindow().setEnterTransition(fade);
                getWindow().setExitTransition(fade);
                break;
            case 3:
                break;
            case 4:
                break;
        }
        setContentView(R.layout.transitions);

也可以通过style实现

<style name="myTheme" parent="android:Theme.Material">  
        <!-- 允许使用transitions -->  
        <item name="android:windowContentTransitions">true</item>  

        <!-- 指定进入和退出transitions -->  
        <item name="android:windowEnterTransition">@transition/explode</item>  
        <item name="android:windowExitTransition">@transition/explode</item>  

        <!-- 指定shared element transitions -->  
        <item name="android:windowSharedElementEnterTransition">  
            @transition/change_image_transform</item>  
        <item name="android:windowSharedElementExitTransition">  
            @transition/change_image_transform</item>  
</style>  

这里explode,slide,fade动画都很好理解,也很好实现

共享元素需要讲一下

首先你需要在Activity A中设置共享元素,添加属性

android:transitionName="share" 

当然,“share”可以自定义,这个没有局限。

在Activity B中也需要给要实现共享元素效果 的元素增加此属性

android:transitionName="share" 

代码中作如下设置

intent=new Intent(this,Transitions.class);
        intent.putExtra("flag",4);
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle());

实现多个共享元素的话

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,  
        Pair.create(view1, "agreedName1"),  
        Pair.create(view2, "agreedName2"));  

实现效果

这里写图片描述

注意点:

运行机器必须是api21以上才有效果,因为是基于5.0的嘛,所以用模拟器运行效果小伙伴要注意一下,不然会出现

   Caused by: java.lang.NoSuchMethodError: android.app.ActivityOptions.makeSceneTransitionAnimation

好啦,就介绍到这啦,代码大家可以下载运行一下,看下效果。

代码下载

http://pan.baidu.com/s/1kUGCM27

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值