美文网首页Android 动画Android学习Android知识
Android L 沉浸式状态栏和圆形动画实现炫酷效果

Android L 沉浸式状态栏和圆形动画实现炫酷效果

作者: 唐码农 | 来源:发表于2016-12-06 10:22 被阅读2150次

    ViewAnimationUtils.createCircularReveal()动画Android L引进到Android中的,此动画是能够实现圆形快速切换,属于Google Material Design风格的动画。

    官方给动画是这样描述:
    当您显示或隐藏一组 UI 元素时,揭露动画可为用户提供视觉连续性。ViewAnimationUtils.createCircularReveal() 方法让您能够为裁剪区域添加动画以揭露或隐藏视图。

    注意:此方法只能在Android L及其以上使用,再Android L 以下不能使用该方法 使用会报异常。

    为了方便最低版本就设置成了21 也就是Android L
    Android L 以下使用动画会发生异常

    minSdkVersion 21
    

    第一步

    跳转页,打开SecondActivity界面

    fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            intent.setClass(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });
    

    第二步

    设置SecondActivity的布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:id="@+id/ll_root"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@mipmap/bg_meinv"/>
    
    </LinearLayout>
    

    第三步

    设置SecondActivity的沉浸式状态栏(Android4.4后)可设置
    让图片和通知栏,导航栏融为一体,使动画执行起来效果更好

    //透明状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //透明导航栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    

    如图所示:


    第四步

    进入SecondActivity 执行圆形动画

    layoutView= (LinearLayout) findViewById(R.id.ll_root);
    layoutView.post(new Runnable() {
        @Override
        public void run() {
            // 圆形动画的x坐标  位于View的中心
            int cx = (layoutView.getLeft() + layoutView.getRight()) / 2;
    
            //圆形动画的y坐标  位于View的中心
            int cy = (layoutView.getTop() + layoutView.getBottom()) / 2;
    
            //起始大小半径
            float startX=0f;
    
            //结束大小半径 大小为图片对角线的一半
            float startY= (float) Math.sqrt(cx*cx+cy*cy);
            Animator animator=ViewAnimationUtils.createCircularReveal(layoutView,cx,cy,startX,startY);
            
            //在动画开始的地方速率改变比较慢,然后开始加速
            animator.setInterpolator(new AccelerateInterpolator());
            animator.setDuration(600);
            animator.start();
        }
    });
    

    最终效果

    Android订阅是探讨Android开发的公众号,分享最有价值的Android干货文章
    欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们

    1480345206391598.jpg

    相关文章

      网友评论

      • biginsect:自定义view 能否实现类似的效果呢? 比如一个圆形view 实现抛物线运动,到屏幕右下角时结束,此时在这个店重绘动画,实现这个圆形view逐渐变大的效果。
      • 30c413b81fe7:感谢分享
        唐码农:@hydome :relaxed: :relaxed:

      本文标题:Android L 沉浸式状态栏和圆形动画实现炫酷效果

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