当前位置: 首页 > news >正文

自定义控件动画篇(四)ObjectAnimator的使用

ObjectAnimator 是 Android 属性动画框架中的一个重要组件,它允许你针对特定属性的值进行动画处理。与 ValueAnimator 相比,ObjectAnimator 更专注于 UI 组件,可以直接作用于视图的属性,如位置、尺寸、透明度等,而无需手动更新这些属性。下面是 ObjectAnimator 的基本使用和一些高级技巧。

基本使用

  1. 创建 ObjectAnimator

     

    创建 ObjectAnimator 最简单的方法是使用静态工厂方法 ofFloat(), ofInt(), ofArgb() 等,但更常用的是通过指定目标对象和要动画化的属性名称来创建。

    Java
    1ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);

    或者使用 ObjectAnimator 的构造函数:

    Java
    1ObjectAnimator animator = new ObjectAnimator();
    2animator.setTarget(view);
    3animator.setPropertyName("alpha");
    4animator.setFloatValues(0f, 1f);
  2. 设置动画时长

     

    使用 setDuration(long duration) 方法设置动画持续时间。

    Java
    1animator.setDuration(1000);
  3. 启动动画

     

    调用 start() 方法开始动画。

    Java
    1animator.start();

高级使用

动画组合

可以使用 AnimatorSet 来组合多个动画,实现并行或顺序播放。

Java

1AnimatorSet set = new AnimatorSet();
2set.playSequentially(ObjectAnimator.ofFloat(view1, "translationX", 0f, 100f),
3                     ObjectAnimator.ofFloat(view2, "translationY", 0f, 100f));
4set.start();
自定义属性动画

如果需要对自定义属性进行动画处理,可以通过实现 Property 类来自定义属性访问器,并将其传递给 ObjectAnimator

Java

1class MyView extends View {
2    private float myCustomValue;
3
4    public MyView(Context context) {
5        super(context);
6    }
7
8    public static final Property<MyView, Float> MY_CUSTOM_PROPERTY = new Property<MyView, Float>(Float.class, "myCustomProperty") {
9        @Override
10        public Float get(MyView object) {
11            return object.myCustomValue;
12        }
13
14        @Override
15        public void set(MyView object, Float value) {
16            object.myCustomValue = value;
17        }
18    };
19}
20
21// 在动画中使用自定义属性
22ObjectAnimator.ofFloat(myView, MyView.MY_CUSTOM_PROPERTY, 0f, 1f).setDuration(1000).start();
动画监听器

使用 AnimatorListenerAdapter 或直接实现 Animator.AnimatorListener 接口,可以监听动画的开始、结束、取消和重复事件。

Java

1animator.addListener(new Animator.AnimatorListener() {
2    @Override
3    public void onAnimationStart(Animator animation) {}
4
5    @Override
6    public void onAnimationEnd(Animator animation) {}
7
8    @Override
9    public void onAnimationCancel(Animator animation) {}
10
11    @Override
12    public void onAnimationRepeat(Animator animation) {}
13});
动画延迟和循环

使用 setStartDelay(long delay) 可以设置动画开始前的延迟时间,而 setRepeatCount(int count)setRepeatMode(int mode) 可以设置动画的重复次数和模式。

Java
1animator.setRepeatCount(ValueAnimator.INFINITE); // 无限循环
2animator.setRepeatMode(ValueAnimator.REVERSE); // 每次循环后反向播放

ObjectAnimator 提供了一个简洁的接口来创建和控制动画,特别适用于 UI 视图的属性动画。通过上述技巧,你可以实现复杂且流畅的动画效果。

http://www.lryc.cn/news/389539.html

相关文章:

  • 实现List接口的ArrayList和LinkedList
  • 下拉选择输入框(基于elment-ui)
  • CPP入门:日期类的构建
  • springboot学习,如何用redission实现分布式锁
  • 【MySQL】如果表被锁可以尝试看一下事务
  • Datawhale - 角色要素提取竞赛
  • 【Sql-驯化】sql中对时间的处理方法技巧总结
  • TFD那智机器人仿真离线程序文本转换为现场机器人程序
  • 贪心+后缀和,CF 1903C - Theofanis‘ Nightmare
  • 10分钟完成微信JSAPI支付对接过程-JAVA后端接口
  • 如何寻找一个领域的顶级会议,并且判断这个会议的影响力?
  • 真的假不了,假的真不了
  • 看完这篇文章你就知道什么是未来软件开发的方向了!即生成式AI在软件开发领域的革新=CodeFlying
  • HTML5五十六个民族网站模板源码
  • Linux_fileio实现copy文件
  • 【JavaEE精炼宝库】多线程进阶(2)synchronized原理、JUC类——深度理解多线程编程
  • 【Linux进程通信】使用匿名管道制作一个简单的进程池
  • Django 多对多关系
  • 构建 Audio Unit 应用程序
  • JavaScript 实用技巧
  • Python协作运动机器人刚体力学解耦模型
  • 可重入锁思想,设计MQ迁移方案
  • Redis安装与使用
  • base64字符串空格问题
  • 【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 同步与通信篇 -- 消息队列和邮箱处理 --(四)
  • 电信NR零流量小区处理
  • ArcTs布局入门03——层叠布局(Stack)
  • C语言之线程的学习
  • HT8691 内置升压模块的D类音频功率放大器芯片IC
  • 和小红书一起参会! 了解大模型与大数据融合的技术趋势