博客
关于我
Android Reveal圆形Activity转场动画
阅读量:797 次
发布时间:2023-03-24

本文共 2575 字,大约阅读时间需要 8 分钟。

CircularReveal动画实现Activity转场效果

在Android开发中,CircularReveal动画是一种非常有趣且实用的转场效果。通过这个动画,我们可以让用户的应用程序在切换Activity时,呈现出一种圆形展开的效果,提升用户体验。

一、效果展示

想象一下,当用户从一个Activity切换到另一个Activity时,屏幕中央会有一个圆形区域逐渐扩大,最终覆盖整个屏幕。这个过程非常流畅,仿佛是从一个透明的层中“揭开”另一个界面。这就是CircularReveal动画的效果。

二、核心知识点

  • CircularReveal动画:这是Android框架提供的一种转场动画,支持圆形展开、缩小等效果。
  • 透明主题:为了实现圆形动画效果,目标Activity的主题需要设置为透明。
  • 动画效果:通过设置动画中心点和展开半径,可以控制动画的起始位置和大小。
  • 三、实现方案

    假设我们有两个ActivityA和ActivityB。目标是通过CircularReveal动画从ActivityA过渡到ActivityB。

    实现步骤:
  • 确定动画中心点:在ActivityA中,获取当前界面中需要作为动画起点的视图的位置。
  • 传递位置参数:将动画中心点的坐标通过Intent传递到ActivityB。
  • 设置透明主题:确保ActivityB的主题设置为透明,以便动画效果得以呈现。
  • 启动ActivityB:在ActivityA中启动ActivityB,同时使用CircularReveal动画选项。
  • 控制布局显示:在ActivityB中,根据Intent接收到的中心点坐标,设置根布局的可见性,并触发动画。
  • 动画执行:通过ViewAnimationUtils创建CircularReveal动画,并在布局测量完成后开始动画。
  • 四、详细实现

    ActivityA(启动界面)
  • 主题设置:确保ActivityA的主题配置正确,特别是当返回时不显示销毁界面。
  • 布局设计:设计一个全屏布局,通常包括一个背景图片和一个覆盖在上面的进度条等元素。
  • 启动ActivityB:使用ActivityOptionsCompat创建转场动画选项,传递起点位置参数。
    public void presentActivity(View view) {
    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
    this, view, "transition"
    );
    // 获取动画中心点
    int revealX = (int) (view.getX() + view.getWidth() / 2);
    int revealY = (int) (view.getY() + view.getHeight() / 2);
    // 创建Intent并添加额外参数
    Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra(MainActivity.EXTRA_CIRCULAR_REVEAL_X, revealX);
    intent.putExtra(MainActivity.EXTRA_CIRCULAR_REVEAL_Y, revealY);
    //启动ActivityB并设置转场动画
    ActivityCompat.startActivity(this, intent, options.toBundle());
    }
  • ActivityB(动画界面)
  • 主题设置:在AndroidManifest.xml中定义一个透明主题样式。
  • 布局设计:确保根布局的背景颜色与主题一致,并设置合适的布局约束。
  • 动画执行
    protected void revealActivity(int x, int y) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // 获取根布局
    View rootLayout = findViewById(R.id.root_layout);
    // 计算最大半径
    float finalRadius = Math.max(rootLayout.getWidth(), rootLayout.getHeight()) * 1.1f;
    // 创建动画
    Animator circularReveal = ViewAnimationUtils.createCircularReveal(
    rootLayout, x, y, 0, finalRadius
    );
    circularReveal.setDuration(400);
    circularReveal.setInterpolator(new AccelerateInterpolator());
    // 设置可见并开始动画
    rootLayout.setVisibility(View.VISIBLE);
    circularReveal.start();
    } else {
    // 对于低于Lollipop版本的设备,直接销毁当前Activity
    finish();
    }
    }
  • 五、注意事项

  • 版本兼容性:CircularReveal动画在API等级为LOLLIPOP及以上版本才可用。
  • 布局设置:确保ActivityB的根布局在动画前设置为不可见,动画开始后设置为可见。
  • Intent参数:在ActivityA中传递必要的圆形动画中心点坐标参数。
  • 通过以上实现方案,可以轻松在Android应用中实现CircularReveal动画转场效果,提升用户体验。

    转载地址:http://lhqfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现求squareDifference平方差算法 (附完整源码)
    查看>>
    Objective-C实现求一个数的位数之和算法(附完整源码)
    查看>>
    Objective-C实现求一个数的因子算法(附完整源码)
    查看>>
    Objective-C实现求一组数字的平均值算法(附完整源码)
    查看>>
    Objective-C实现求两个数组的中位数算法(附完整源码)
    查看>>
    Objective-C实现求两点间距离(附完整源码)
    查看>>
    Objective-C实现求中位数(附完整源码)
    查看>>
    Objective-C实现求中位数(附完整源码)
    查看>>
    Objective-C实现求众数(附完整源码)
    查看>>
    Objective-C实现求圆锥的体积(附完整源码)
    查看>>
    Objective-C实现求曲线在某点的导数(附完整源码)
    查看>>
    Objective-C实现求最大公约数 (GCD)的算法(附完整源码)
    查看>>
    Objective-C实现求梯形面积公式(附完整源码)
    查看>>
    Objective-C实现求模逆算法(附完整源码)
    查看>>
    Objective-C实现求正弦(附完整源码)
    查看>>
    Objective-C实现求矩阵对角线元素之和(附完整源码)
    查看>>
    Objective-C实现汉密尔顿循环算法(附完整源码)
    查看>>
    Objective-C实现波利比乌斯密码算法(附完整源码)
    查看>>
    Objective-C实现波雷费密码算法(附完整源码)
    查看>>
    Objective-C实现洗牌移位密码算法(附完整源码)
    查看>>