美文网首页
Android-L共享元素动画和Circular动画

Android-L共享元素动画和Circular动画

作者: Swerve | 来源:发表于2017-04-06 10:43 被阅读0次

    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())
                    );
    /*这里面的五个参数分别是操作视图,开始点x和y,开始和结束半径*/
                    animator.setInterpolator(new AccelerateDecelerateInterpolator());
                    animator.setDuration(3000);
                    animator.start();
                }
            });
    

    共享元素渐变

    这种动画比较复杂,首先你的SDK版本必须大于21。

    1. 在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>
    
    
    1. 在布局文件中添加transitionName属性,两个共享的元素名字必须相同,可以在String中定义
    <Button
            android:id="@+id/button2"
            android:text="共享元素渐变"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:transitionName="@string/transitonButton"/>
    
    1. 在第一个A Activity中实现以下方法。
      方法名是A Activity里的一个按钮点击事件。
      注释中是实现多个共享元素渐变的方法,导入的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());
        }
    
    1. 在目标Activity中实现下面的方法,即跳转到的Activity
       ActivityOptions.makeSceneTransitionAnimation(this, button, "Button");
    

    相关文章

      网友评论

          本文标题:Android-L共享元素动画和Circular动画

          本文链接:https://www.haomeiwen.com/subject/bhwfattx.html