实现弯曲动画的问题[重复]

2023-11-29

可能的重复:
Android,沿路径移动位图?

我想通过弯曲的路径移动图像。在android中可以吗?我搜索了很多,但我只能找到有关缩放、旋转和翻译动画的信息。所以有人有任何想法请帮忙。在 Android 中可能吗?


下面是功能齐全的代码,它将沿着由三个点定义的弯曲路径进行动画处理。 Point 只是一个包含 x 值和 y 值的类(尽管您可以轻松地将其扩展为更多维度)。

所有 m 变量均取自 TranslateAnimation 并以类似的方式使用,因此如果某些内容没有意义,您应该能够相对轻松地将其与 TranslateAnimation 代码进行比较。

在初始化中对resolveSize 的调用意味着您可以使用任何动画类型(ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT)指定圆弧的起点、终点和半径,就像使用普通 TranslateAnimation 一样。

calcBezier 计算直接取自的二次贝塞尔曲线维基百科。贝塞尔曲线应该允许平滑缩放,并且在图形中很常见(也用于 Android 的 Path 类)。

实际的移动发生在 applyTransformation 中。 interpolatedTime 给出一个介于 0 和 1 之间的值,该值根据提供的插值器非线性增加。 dx 和 dy 是给定时间内曲线上的实际 x 和 y 点。

此类的唯一限制是 y 的最大变化始终发生在曲线的中心(请参阅初始化中 middleX 的计算)。但是,修改起来很容易,例如,如果您想要非对称曲线,则可以沿曲线给出应出现高点的特定点。

查看 TranslateAnimation 的 Android 代码特别有帮助。看:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.5_r1/android/view/animation/TranslateAnimation.java#TranslateAnimation

public class ArcTranslate extends Animation {

private Point start;
private Point end;
private Point middle;
private final float mFromXValue;
private final float mToXValue;
private final float mYValue;
private final int mFromXType;
private final int mToXType;
private final int mYType;

/**
 * A translation along an arc defined by three points and a Bezier Curve
 *
 * @param duration - the time in ms it will take for the translation to complete
 * @param fromXType - One of Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT.
 * @param fromXValue - Change in X coordinate to apply at the start of the animation
 * @param toXType - One of Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT.
 * @param toXValue - Change in X coordinate to apply at the end of the animation
 * @param yType - One of Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT.
 * @param yValue - Change in Y coordinate to apply at the middle of the animation (the radius of the arc)
 */
public ArcTranslate(long duration, int fromXType, float fromXValue,
        int toXType, float toXValue, int yType, float yValue){
    setDuration(duration);

     mFromXValue = fromXValue;
     mToXValue = toXValue;
     mYValue = yValue;

     mFromXType = fromXType;
     mToXType = toXType;
     mYType = yType;

}

/** Calculate the position on a quadratic bezier curve given three points
 *  and the percentage of time passed.
 * from http://en.wikipedia.org/wiki/B%C3%A9zier_curve
 * @param interpolatedTime - the fraction of the duration that has passed where 0<=time<=1
 * @param p0 - a single dimension of the starting point
 * @param p1 - a single dimension of the middle point
 * @param p2 - a single dimension of the ending point
 */
private long calcBezier(float interpolatedTime, float p0, float p1, float p2){
    return Math.round((Math.pow((1 - interpolatedTime), 2) * p0)
           + (2 * (1 - interpolatedTime) * interpolatedTime * p1)
           + (Math.pow(interpolatedTime, 2) * p2));
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    float dx = calcBezier(interpolatedTime, start.x, middle.x, end.x);
    float dy = calcBezier(interpolatedTime, start.y, middle.y, end.y);

    t.getMatrix().setTranslate(dx, dy);
}

@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
    float startX = resolveSize(mFromXType, mFromXValue, width, parentWidth);
    float endX = resolveSize(mToXType, mToXValue, width, parentWidth);
    float middleY = resolveSize(mYType, mYValue, width, parentWidth);
    float middleX = startX + ((endX-startX)/2);
    start = new Point(startX, 0);
    end = new Point(endX, 0);
    middle = new Point(middleX, middleY);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现弯曲动画的问题[重复] 的相关文章

  • 如何设置日期选择器的日期?

    I use DatePickerDialog OnDateSetListener效果很好 我想在日期选择器中添加 120 天的日期 我的意思是 如果我添加 120 天 日期和月份将自动更改 怎么做 像这样的事情应该可以解决问题 Calend
  • 现实世界中的 JavaCard 3?

    我目前正在从事我的文凭工作 部分工作包括开发JavaCard常规小程序SIM牌 第一个选项是使用JavaCard2 X API并使用APDU与小程序通信的命令 这可能非常棘手 因为我需要为 android 开发客户端应用程序 它将与这个小程
  • 更新语言时操作栏未更新

    我目前正在构建一个应用程序 允许人们在应用程序中更新语言 但是 当更改区域设置时 所有字符串都会更新 但操作栏中的字符串不会更新 对应于清单中的活动名称 仅当应用程序从头开始重新启动时才会考虑语言更改 在不强制应用程序重新启动的情况下更新所
  • Android 设备与本地 API 服务器通信

    我想知道如何在外部设备上模拟我的 Android 应用程序 以便与我的计算机上运行的本地 API 服务器进行通信 该应用程序使用 cordova 并使用 USB 连接在 Android 设备上运行 我正在本地运行 API 服务器 使用我的机
  • Android studio 添加外部项目到 build.gradle

    我有一个示例项目 具有以下设置 root Pure Java Lib Android Test Lib Android Test Project 哪里 测试项目 取决于 Test Lib 最后一个取决于 纯Java库 编译项目并启动此设置效
  • 如何解决Android中的NullPointerException错误?

    下面的代码在 Eclipse 的模拟器中运行顺利 但在 Android 手机和平板电脑上运行时出现问题 public class RingerActivity extends Activity Called when the activit
  • 语音识别和文本转语音

    我想开发一个实现语音识别的应用程序 然后使用文本到语音引擎实现文本到语音 我发布了下面的代码 我使用两个按钮和一个列表视图 一个按钮用于语音识别 另一个按钮用于文本转语音 列表视图用于两者 首先在列表视图中发布语音识别的结果 然后应用程序将
  • 如何将 Material 按钮与其他 UI 元素对齐

    我无法将默认材质按钮与 UI 的其他元素对齐 事实上 我已经查看了 Android 源代码 按钮的背景包含插图 以便能够绘制阴影并处理单击时按钮的高度
  • 以编程方式更改小部件布局

    假设我有两个小部件布局 Layout1 和 Layout2 小部件的默认值是 Layout1 但我允许用户选择 他们希望小部件采用哪种布局 所以如果用户更改为 Layout2 如何以编程方式将布局更改为 Layout2 小部件没有像活动那样
  • Android MapView v2 黑屏

    我一直在尝试实现 android 的 MapView v2 除了这个错误之外 我让它工作得很好 This is what it looks like when I load the app from scratch 如您所见 没有任何问题
  • AWS Cognito-获取带有ID的用户信息

    有没有什么方法可以获取 AWS Cognito 池 在 Android 上 中未登录的用户的信息 并知道他的 ID 我尝试了该代码 AppHelper getPool getUser username getDetailsInBackgro
  • 具有线程安全性的 eventbus 最佳实践

    我的应用程序具有用户交互活动和后台服务 这是修改数据模型的唯一地方 后台服务监听用户所做的操作以及来自网络的传入消息 因此 可能会出现并发问题 我尝试使用处理程序来防止这些问题 对于事件层 我使用 greenrobots Eventbus
  • 从最近打开的应用程序中打开 Android 中的旧活动?

    我有 4 个活动 Launcher MainActivity SingleTask NotificationActivity ExampleActivity 当用户点击通知时 通知活动然后打开示例活动并完成通知活动 当我按下回键时主要活动打
  • 当对话框打开时如何处理屏幕方向变化?

    我有一个 Android 应用程序 它已经在处理方向的更改 即有一个android configChanges orientation 在清单和onConfigurationChange 活动中的处理程序切换到适当的布局并准备它 我有一个横
  • ConstraintLayout 源代码位于哪里?

    哪里可以找到android的源代码ConstraintLayout 我在支持框架存储库甚至谷歌搜索中都找不到它 它的源代码在这里 https android googlesource com platform frameworks opt
  • 使用 Espresso + MockK 进行 Android UI 测试时,在模拟器上使用 SIGSEGV 会崩溃,在物理设备上则正常

    我刚刚开始使用MockK模拟基于 MVP 的应用程序中的所有存储库 服务逻辑以进行 UI 测试 我有一些运行登录活动的 UI 测试 其中 Espresso 输入登录名和密码 并使用 MockK 我可以fake登录失败或无法登录的各种情况 所
  • Android 应用程序中通过 VideoView 将正在播放的视频静音

    我想在我的 Android 应用程序中将 VideoView 正在播放的视频静音 我在 VideoView 类中找不到任何方法来执行此操作 知道如何做到这一点吗 我在 MediaPlayer 类中找到了一个方法 setVolume 但我无法
  • 尝试在 android 中更新 sqlite 数据库时出错

    我的数据库正在运行 但我插入的所有记录都是为了检查目的 现在我想删除所有表并创建新表 所以我尝试通过更改版本来更新数据库 我没有对创建表查询进行任何更改 但外键约束失败 代码 787 这是我的DBHelper class private s
  • 获取定制旋转器项目

    我实现了自定义微调器 public class MyAdapter extends ArrayAdapter
  • Firebase 附加权限。是否要求用户接受

    我目前正在致力于将 Firebase Analytics 集成到我的 Android 应用程序中 我遇到的问题是 Firebase 添加了一些新权限 这些权限是 permission WAKE LOCK com google android

随机推荐

  • OpenGL - 与未来的上下文共享现有纹理?

    我有一个应用程序 可以使用 FBO 扩展将帧绘制到纹理上 然后这些帧将显示到打开的不同窗口while应用程序正在运行 这意味着可以在创建任何新窗口的 OpenGL 上下文之前创建和池化纹理 并且wglShareLists叫做 目前我必须做g
  • WooCommerce 使用 WP_Query 在价格范围内搜索产品

    我目前正在使用 Woocommerce 为 WordPress 网站构建自己的自定义高级搜索功能 您应该能够使用过滤器进行搜索 Category 最低 最高价格 我目前的进展附在下面 这使您能够在 URL 参数中指定类别 slugs 返回的
  • 来自同一程序的多个输出纹理

    我正在尝试学习如何利用 WebGL2 中的同一程序进行多个输出gl drawBuffer 能力 我看了书 OpenGL ES 3 0 编程指南 第 11 章 其中列出了发生多输出所需的内容 但是 着色器源示例非常简单 仅输出常量值 我想知道
  • Spark:将 RDD 保存在 HDFS 中已有的路径中

    我可以将 RDD 输出保存到 HDFS另存为文本文件方法 如果文件路径已存在 此方法将引发异常 我有一个用例 需要将 RDDS 保存在 HDFS 中已有的文件路径中 有没有办法将新的 RDD 数据附加到同一路径中已存在的数据中 从 Spar
  • 单击后如何保持菜单链接突出显示(粗体和蓝色)?

    我的页面上有一个标题菜单 www wortwaerts net 在下面的代码的基础上工作正常 除了一个问题 到目前为止我找不到解决方案 我希望最后单击的菜单链接保持突出显示 粗体和蓝色 直到选择另一个链接然后将以同样的方式突出显示 我已经研
  • 如何在 Julia 中进行正确的微基准测试?

    朱莉娅 1 0 0文档提供一般提示 它还建议不要使用 time 宏 对于更严格的基准测试 请考虑 BenchmarkTools jl 包 其中多次评估函数以减少噪音 它们在使用中的比较如何 是否值得麻烦地使用 基础 Julia 中没有的东西
  • Google Apps 脚本错误 - 需要授权才能执行该操作

    我创建了一个 Apps 脚本来替换 Google Doc 中的令牌 此应用程序脚本已部署为 API 可执行文件 我可以在应用程序脚本编辑器中运行函数 而不会出现任何授权错误 但是 当从我的 java web 应用程序调用时 它有时会失败并出
  • 如何在c#.net中动态创建的按钮上执行点击事件

    我正在尝试构建一个应用程序 用户可以在其中选择类别并根据它显示其子类别 这些子类别是动态创建的按钮 现在 由于按钮是动态创建的 所以我很困惑如何在button click事件下编写代码 因为我不知道有多少子类别 那么有什么方法可以执行特定按
  • Xcode 9 Beta - 编辑器,列选择不见了?

    在以前版本的Xcode中 我们可以按住Alt Option键 拖动鼠标来选择文本编辑器中的列 在 Xcode 9 Beta 中这似乎不起作用 现在已经消失了 还是有不同的组合键 有任何想法吗 根据 Xcode 9 发行说明 这是一个缺失的功
  • 在 Microsoft Visual Studio 2015 中重新定义 C/C++ 入口点

    事情是这样的 伙计们 我在尝试使程序的入口点不被调用时遇到了麻烦main早些时候 在 Visual Studio 2012 中这非常简单 我只是使用 ENTRY链接器的密钥或我的项目的相同设置 项目 gt project name 属性 g
  • 如何在 CakePHP 中为一个模型动态使用多个数据库

    好吧 我的第一个问题被修改了很多次 所以我选择删除它并重新表述我的问题 我制作了一个具有不同模型名称的小型测试用例项目 以找到适合我的问题的解决方案 Warning 不要混用数据库与tables 动机 我将用户数据分成多个数据库对于法律和绩
  • 使用 ado 和 vbscript 从 csv 更新数据库而不需要记录集循环?

    我想使用 Vb 脚本和 ADO 将 csv 文件中的数据上传到 Access 数据库 这样我就不必打开 Access 或 Excel 到目前为止 我在下面有一个工作脚本 但是有没有更好的方法来批量上传数据 而无需创建记录集并循环每条记录 我
  • 是什么原因导致 ClickOnce URLDownloadToCacheFile 在安装过程中失败?

    通过 Firefox 安装 ClickOnce 应用程序时出现以下错误 在同一台计算机上使用 IE 则不会发生这种情况 我发誓我以前通过 firefox 安装过它 这是一台 Windows 7 机器 The following proper
  • 在 Windows 应用商店应用程序 WebView 中通过请求发布数据 - 使用 C#

    我的应用程序中有以下场景 首次启动时 用户可以注册一个帐户 然后 应用程序从我的网络服务器获取一对 int user id string session id 并将该数据存储在应用程序中 在我的应用程序中 我使用 WebView 它可以让用
  • 如何将数组中的每个元素转换为自己的数组?

    使用 Ruby 2 4 我有一个字符串数组 a b c 如何获取上述内容并将每个元素转换为它自己的一个元素数组 所以我希望这样的操作的结果是 a b c 您可以使用zip a b c zip gt a b c
  • ASP.NET 中的批量 301 重定向,包括需要根据查询字符串参数重定向到不同位置的页面

    我们网站的多个页面使用旧的非 SEO 友好 URL 进行索引 例如http www domain com DocumentDetails aspx id 555 最近 我们实现了使用存储在数据库中的 slug 的路由 并查找 slug 以使
  • C#读取USB设备序列号

    有没有办法使用 Visual Studio 2005 读取 USB 设备序列号和 USB 文本文件中的数据 尝试这个 USBSerialNumber usb new USBSerialNumber string serial usb get
  • 部署gae java时如何设置版本?

    由于 Intellij Idea IDE gae 部署插件不起作用 我必须使用mvn appengine update 它始终部署到版本 1 忽略 appengine web xml 中的版本 如何设置版本mvn appengine upd
  • 如何使用 NHibernate 进行分页?

    例如 我想仅使用显示的行数所需的数据填充 ASP NET 网页中的 gridview 控件 NHibernate 如何支持这一点 ICriteria has a SetFirstResult int i 方法 它指示您希望获取的第一个项目的
  • 实现弯曲动画的问题[重复]

    这个问题在这里已经有答案了 可能的重复 Android 沿路径移动位图 我想通过弯曲的路径移动图像 在android中可以吗 我搜索了很多 但我只能找到有关缩放 旋转和翻译动画的信息 所以有人有任何想法请帮忙 在 Android 中可能吗