适用于Android的功能发现动画

时间:2016-05-26 16:17:29

标签: android android-animation material-design

自5月以来,Google已在其网站上更新了其Material Design指南。我在其中一个名为Feature discovery的新部分中看到了一个有趣且酷炫的设计模式。

我想实施the animation for 'discovering' the Navigation Drawer button。导航抽屉和浮动操作按钮的最后一次Google Fit更新中有类似的动画。

与往常一样,对于Android动画,Google提供了一个很棒且非常棒的UI指南,但我们没有任何进一步的信息可以为我们自己的应用程序开发它。

您知道是否有Android库的原生解决方案来实现这些动画?如果是,它是否适用于Android 5.0以下(API 21) - 它可以高于Android 4.1 +?

编辑:我制作了一个Github项目来实现相同的动画。您可以在此处找到它:https://github.com/Guimareshh/Feature-discovery-animations

谢谢!

3 个答案:

答案 0 :(得分:8)

您需要制作自定义动画,否则您可以使用Ripple Effect + Reveal并将其设置为导航抽屉图标,

Circular Reveal Animation

void enterReveal() {
    // previously invisible view
    final View myView = findViewById(R.id.my_view);

    // get the center for the clipping circle
    int cx = myView.getMeasuredWidth() / 2;
    int cy = myView.getMeasuredHeight() / 2;

    // get the final radius for the clipping circle
    int finalRadius = Math.max(myView.getWidth(), myView.getHeight()) / 2;

    // create the animator for this view (the start radius is zero)
    Animator anim =
        ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);

    // make the view visible and start the animation
    myView.setVisibility(View.VISIBLE);
    anim.start();
}

答案 1 :(得分:4)

回答您的问题,Google总是会提供有趣的Widget组件的新示例。其中大部分内容仅会添加到新版Android中。这有不同的原因。例如,因为新的小部件使用资源并且仅在新版本的Android上工作,因此具有更新的UI引擎。还有其他......

这就是为什么没有Google官方的Reveal动画,它仅适用于Android 5.0&gt ;.

但是有很多反向运动:

查看所有可用的内容,而不是针对Android Awesome Android UI的官方后退。

当谷歌推出Android Material时 - 没有任何库可用于所有这些元素。但在短时间内,由不同的开发人员编写了许多有用的库。但在这种流行之后,Google会为这些小部件引入所有库。

因此,没有向后移动,很可能谷歌不会引入这些小部件。但是听你的问题,我认为你可以做到这一点,而不是使用上面链接的官方后端。

答案 2 :(得分:4)

我还在自定义视图中创建了此DesignPattern。你可以找到它here。请注意,这是我第一次发布的自定义视图,它仍在开发中(因此它们可能存在一些错误,并且缺少一些文档)但它应该足以满足日常使用。

要使用它,请将库添加到依赖项中:

compile 'com.cilenco.libraries:featurediscovery:1.0.2'     or
compile 'com.cilenco.libraries:featurediscovery:+'         always newest version

之后,您可以像这样创建DiscoveryView。检查所有其他功能,以调整外观和对视图的控制。

DiscoveryView discoveryView = new DiscoveryView.Builder(context, view)
.setPrimaryText(R.string.header)
.setSecondaryText(R.string.description)
.setOnClickListener(this)
.build();

discoveryView.show();

为了使这个视图更好,如果您发现任何错误或有任何新想法,请随时报告问题并向存储库发出拉取请求。