java - Android:动画自定义 View

标签 java android android-layout animation android-animation

编辑 2:新的官方培训指南

开发者网站发布了 UI 相关内容的培训指南,这是索引:

  • 动画概览
  • 属性动画概述
  • 动画可绘制图形
  • 使用动画显示或隐藏 View
  • 使用动画移动 View
  • 使用 fling 动画移动 View
  • 使用缩放动画放大 View
  • 使用 Spring 物理动画运动
  • 自动更新布局动画
  • 使用过渡动画更改布局
  • 创建自定义过渡动画
  • 使用动画启动 Activity

如果您对其中任何一个感兴趣,请点击以下链接: https://developer.android.com/training/animation/


编辑:答案总结

我发现了 5 种在 Android 中制作动画的方法:

  1. 使用 Property AnimationViewproperties 设置动画平滑地改变rotationalphascale

  2. 帧动画(AnimationDrawable):快速更换图片,使其看起来有动画效果

  3. 使用 vector (VectorDrawable) 设计图像,并通过使用AnimatedVectorDrawable 随时间编辑它们动画它们.

  4. Override onDraw()View 上并执行 Custom Drawing通过在 Canvas 上绘画。

  5. 使用Lottie ,从 After Effects 再现动画的内容。 LottieFiles 上提供了许多动画.

不过,Android 也提供了一些内置工具,例如 Scenes (让您在共享 Views 的多个布局之间制作动画过渡),Shared elements (这让您产生将 View 从一个 Activity 传递到另一个 Activity 的错觉)等等。

API 21 中添加了许多(如果不是全部)这些功能,请单击此处 here了解更多信息。

这里有一些关于动画的有趣文章/博客:

最后,几个有趣的工具:

  • GitHub 上录制 Android 屏幕的 Mac 工具.

  • 视频转 GIF 转换器 online .


注意

我知道 Android 提供了转换,例如 scalealpharotatetranslation 等。

示例

我想查看和比较两个示例。

1 - 自定义 View 动画

例如,filling up a glass of waterdrawing a path .

2 - 复杂 View 动画

例如,Android 的 StackExchange 应用程序,登录屏幕动画(在上面找不到视频,也没有检查在 iOS 中的行为是否相同)。

问题

对于第一个示例,除了播放 GIF 或在很短的时间后手动更改图像之外,我想不出任何其他方法。

我不认为是这样,所以我想问一下,(1)你知道它是怎么做到的吗?

关于第二个例子,我只有一个想法,那就是设置一个 Path 并通过在 animate( )(2)这可能吗?

除了上面提到的(3)你还知道其他播放动画的技巧吗? (如Scene transitions - 在回答中提到-)

请分享!谢谢。

最佳答案

“装满一杯水”动画直接可以通过帧动画来实现,即一张一张的换图。 Here你可以看到一篇很好的博客文章描述了如何实现这种动画,基本上和你提到的“装满一杯水”是一样的:

enter image description here

其他动画乍一看有点难。

enter image description here

但打开“显示布局边界”后,您会发现那里没有魔法。基本上这只是一个平移动画,它将 View 从一个位置转换到另一个位置。在这个动画的情况下,困难的部分是实现寻找平移坐标的算法。之后,动画只是通过 scene transition animation 的几行代码。 .

// assuming at this step all the views are at the initial position at x0, y0
TransitionManager.beginDelayedTransition(rootLayout);
// here set view coordinates to x1, y1 - the final position

过渡框架将为您完成其余的工作。它会找到增量并为您执行动画。 Here您会发现 Lucas Rocha 的一篇不错的文章.

关于java - Android:动画自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42763616/

相关文章:

java - List<MyClass> 中可以添加什么类型的对象 list = new ArrayList<>();

java - 让 Java 能够从文本文件中读取一行并打印出来

安卓版面: width half of parent

java - 三星盖乐世 S8+ : Device Metrics Gives wrong device screen pixel density

android - 使用一部智能手机/平板电脑连接多个智能 watch

android - Jetpack Compose 中的动画重组( View 更改)

android - 设置弹出窗口显示时窗口状态栏颜色

java - 使用 Spring、Scala 和 Jackson 将 JSON 反序列化为 Map[String, SomeJavaObject]

java - JComboBox 和 vetoableChange?

android - 卸载 Scala 对象