Android 圆形复选标记动画

2024-03-16

我正在尝试实现类似的目标BEM动画类型描边可以在 iOS 库中找到BEM复选框 https://github.com/Boris-Em/BEMCheckBox.

我尝试使用动画矢量可绘制对象来实现此目的,但我不知道如何对圆内的复选标记进行动画处理,从 0 起始点到最终位置。 (圆圈可以是静态的,我希望使复选标记具有动画效果)。 这是我为此尝试的实现:

可绘制/vector_drawable_ic_check_circle_white_48px.xml

    <path
            android:name="check"
            android:fillColor="#FFFFFF"
            android:pathData="M37.1,13.6L18.4,32.3h1.7l-8.5-8.5L10,25.5l8.5,8.5l0.8,0.8l0.8-0.8l18.7-18.7L37.1,13.6L37.1,13.6z"/>
    <path
            android:name="circle"
            android:fillColor="#FFFFFF"
            android:pathData="M24,48c13.3,0,24-10.7,24-24S37.3,0,24,0S0,10.7,0,24S10.7,48,24,48L24,48z
M24,45.6
C12.1,45.6,2.4,35.9,2.4,24S12.1,2.4,24,2.4S45.6,12.1,45.6,24S35.9,45.6,24,45.6L24,45.6z"/>
</vector>

动画/transform.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
            android:duration="1000"
            android:propertyName="fillColor"
            android:valueFrom="@color/transparent"
            android:valueTo="@color/white"/>
</set>

可绘制/animation.xml

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/vector_drawable_ic_check_circle_white_48px">
    <target
            android:name="check"
            android:animation="@anim/change_color"/>
</animated-vector>

设置布局后,我使用以下命令启动动画:

ImageView mCpuImageView = (ImageView) findViewById(R.id.animated_check);
Drawable drawable = mCpuImageView.getDrawable();
if (drawable instanceof Animatable) {
    ((Animatable) drawable).start();
}

谁能帮我这个?有没有更简单的方法来实现这一点(自定义视图或现有库)?

我的想法是,我想要在一个圆圈中有一个复选标记,并且我想要为复选标记的路径设置动画。当它显示时,只有圆圈可见,然后以动画方式创建复选标记。如果其他自定义(例如在对复选标记进行动画处理的同时对圆圈进行动画处理)很容易实现,那就更好了,但首先我只想对复选标记进行动画处理。

LE:最后,我选择采用通过自定义视图手动创建动画的方法。如果有人知道我如何通过矢量绘制来实现这一点,那将是一个很好的开发实践。谢谢。


我一直在寻找同样的,这个post https://medium.com/@ali.muzaffar/understanding-vectordrawable-pathdata-commands-in-android-d56a6054610e几乎可以解释这一切。该帖子中的代码:

可绘制/check_mark.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <group android:name="background">
        <path
            android:name="circle"
            android:fillColor="@color/colorPrimary"
            android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0" />
    </group>
    <group android:name="check">
        <path
            android:name="tick"
            android:pathData="M6,11 l0,0 l0,0"
            android:strokeColor="@color/colorAccent"
            android:strokeWidth="1" />
    </group>

</vector>

可绘制-v21/animated_check.xml

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/check_mark">
    <target
        android:name="tick"
        android:animation="@anim/check_animation" />
</animated-vector>

动画/check_animation.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:ordering="sequentially"
    android:shareInterpolator="false">
    <!-- Step 1 -->
    <objectAnimator
        android:duration="@android:integer/config_shortAnimTime"
        android:propertyName="pathData"
        android:valueFrom="M6,11 l0,0 l0,0"
        android:valueTo="M6,11 l3.5,4 l0,0"
        android:valueType="pathType" />
    <!-- Step 2 -->
    <objectAnimator
        android:duration="@android:integer/config_shortAnimTime"
        android:propertyName="pathData"
        android:valueFrom="M6,11 l3.5,4 l0,0"
        android:valueTo="M6,11 l3.5,4 l8,-7"
        android:valueType="pathType" />
</set>

Usage

布局XML

<ImageView
    android:id="@+id/imageView"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:visibility="visible"
    app:srcCompat="@drawable/animated_check" />

Java类

mImgCheck = (ImageView) findViewById(R.id.imageView);
((Animatable) mImgCheck.getDrawable()).start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 圆形复选标记动画 的相关文章

随机推荐

  • -m32 选项不适用于 gcc,但适用于 g++

    我试图在 x86 64 ubuntu 12 04 机器上编译 32 位目标的应用程序 我使用安装了所需的包 sudo apt get install gcc multilib g multilib libc6 i386 libc6 dev
  • 错误:安装 ruby​​-debug-ide

    事实上 我是 ruby on Rails 开发的新手 并不是说我无法在 aptana studio 3 上安装 gem install ruby debug ide gem install ruby debug ide Temporaril
  • 声纳:“关闭这个PreparedStatement”

    Why is 声纳Qube http docs sonarqube org 如果我在finally块中关闭它 Jenkins的插件会抱怨打开的语句 我需要在单独的函数中验证数据库连接 final String PING SELECT 1 f
  • Hamcrest Matchers 包含匹配器列表

    我正在尝试使用org hamcrest Matchers contains java util List gt http hamcrest org JavaHamcrest javadoc 1 3 org hamcrest Matchers
  • 以编程方式将 UILabels 和 UIImageViews 添加到 UIScrollView

    我知道这个问题在这里经常出现 但我似乎仍然无法让它发挥作用 我可能没有正确启动视图或其他 无论如何 我正在尝试以编程方式向 UIScrollView 添加多个标签和图像 这是我的 h 文件的代码 import
  • ggplot2 中缺少功能区

    我似乎在 ggplot2 中设置功能区显示时遇到问题 这是一个组成的数据集 Estimate lt c 100 125 150 175 GlobalDFData lt data frame Estimate Upper Estimate 2
  • JavaScript 大括号参数作为函数参数[重复]

    这个问题在这里已经有答案了 我对 javascript 不太熟悉 并且有一个关于函数参数周围使用大括号的问题 因为它不是 JSON 结构 我正在学习核js 我找到了一些代码作为示例 但我不太明白 为什么 产品 在大括号中 addToCart
  • 串行执行单元测试(而不是并行)

    我正在尝试对我编写的 WCF 主机管理引擎进行单元测试 该引擎基本上根据配置动态创建 ServiceHost 实例 这使我们能够动态地重新配置哪些服务可用 而无需在添加新服务或删除旧服务时关闭所有服务并重新启动它们 然而 由于 Servic
  • GCC Linker:如何在输出部分生成每个文件贡献的报告

    最近我在尝试链接我的程序时遇到了一个问题 它报告 text无法放入指定的内存区域 显然 源代码变得太大而无法在有限的内存区域中链接 我现在要做的是分析哪个文件对 text 部分贡献最大 以便进行后续代码优化 我尝试了很多方法但没有成功 nm
  • 飞镖向下转型

    我需要在 dart 中进行向下转换 例如可以从Object to int 但我无法用我自己的课程来做到这一点 难道我做错了什么 或者正确的方法是怎样做的 class Person final String name final int ag
  • 我如何模拟 JodaTime 实际日期?

    我想测试一下这个方法 public FirmOrder findActiveByModelColor ModelColor modelColor Query query em createQuery FROM FirmOrder fo WH
  • 将 bootstrap select2 与 JqGrid 表单一起使用

    我正在尝试使用 jqgrid 形式实现 bootstrap select2 但似乎可以正确执行 在 jqgrid 声明的 colmodel 上我有 name staff index staff width 31 formoptions el
  • SoapUI 更改端点地址

    我想更改端点地址 但它给了我定义的值 我的意思是 只有一个值 我尝试在那里写 但它不起作用 它不可编辑 我怎样才能改变它 查看请求窗口并展开包含端点地址的选择框 你应该看到这样的东西 edit current add new endpoin
  • xml 模式中是否有任何方法可以让 xml 元素中的属性始终大于另一个属性?

    这里是xml
  • 发送器停止后让接收器继续运行

    我正在使用一个基于 Google 的简单接收器CastHelloText 示例应用程序 https github com googlecast CastHelloText chrome 当发送者断开连接时 我想允许接收者继续显示 我认为这可
  • Python 网络服务

    我正在做类似于 Ubuntu Landscape 的服务器 客户端应用程序 http www canonical com enterprise services ubuntu advantage landscape http www can
  • 如何在 XML 中表示列表数据

    我正在为我当前的用例设计 XML 文档 我的用例是 给定一个 id 我可以获得检查分数 天赋分数和类别数量 每个类别都会有类别ID 检查分数和天赋分数 所以假设如果我有两个 id 那么上面的数据将存在于两个 id 中 例如 下面是我基于单个
  • 在 Neo4J Cypher 2.0 中创建多个节点/边时发出一个 MERGE 请求更好,还是将其拆分为事务更好?

    我有一个很长的 Cypher 查询 新的 Neo4J 2 0 版本 它使用 MERGE 命令创建多个节点和连接 问题是 您认为我最好将其分成不同的部分并将其作为交易提交 为了稳健性 还是应该保留长的单个交易 为了速度 这是查询 MATCH
  • 将逗号(,)放在数组末尾。这是约定吗?

    有时我会看到如下所示的数组 array item1 gt array subitem1 subitem2 为什么数组末尾添加了逗号 而submit m2后没有元素 它使得稍后添加另一个条目变得更加容易
  • Android 圆形复选标记动画

    我正在尝试实现类似的目标BEM动画类型描边可以在 iOS 库中找到BEM复选框 https github com Boris Em BEMCheckBox 我尝试使用动画矢量可绘制对象来实现此目的 但我不知道如何对圆内的复选标记进行动画处理