博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义Property属性动画
阅读量:7069 次
发布时间:2019-06-28

本文共 1886 字,大约阅读时间需要 6 分钟。

同步发表于

代码获取git clone https://github.com/avenwu/support.git

在Android中动画的实现有许多不同选择,本文将扩展FrameLayout为其添加背景动画;

针对某个view做动画比较方便,这里通过自定义的属性来为一个容器类布局添加背景动画;

Property动画

思路

  1. 动画的原理本质就是修改属性值,然后根据新的值进行绘制;
  2. 采用ObjectAnimator,其内部实现了对值再给定时间内的变化处理;
  3. 定义代表缩放圆圈的半径属性,刷新视图;

实战

根据需要,先定义float型半径mRippleRadius,并提供相应地setter、getter

private float mRippleRadius;    private float getRadius() {        return mRippleRadius;    }    private void setRadius(float radius) {        this.mRippleRadius = radius;    }

添加Property

Property
mRadiusProperty = new Property
(Float.class, "mRippleRadius") { @Override public Float get(BreathingDelegate object) { return object.getRadius(); } @Override public void set(BreathingDelegate object, Float value) { object.setRadius(value); } };

现在利用ObjectAnimator,实现mRippleRadius的变化,需要注意的是再每次值变化后,这里手动调用的invalidate保证视图会刷新;

ObjectAnimator animator = ObjectAnimator.ofFloat(this, mRadiusProperty, mRippleRadius, mEndRadius);        animator.setDuration(mDuration);        animator.setRepeatCount(ValueAnimator.INFINITE);        animator.setRepeatMode(ValueAnimator.REVERSE);        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                mTarget.invalidate();            }        });

最后重载绘制方法,为容器绘制我们希望看到的背景

public void onDraw(Canvas canvas) {        mRippleRect.set(mBorderRect.centerX() - mRippleRadius, mBorderRect.centerY() - mRippleRadius,                mBorderRect.centerX() + mRippleRadius, mBorderRect.centerY() + mRippleRadius);        canvas.drawOval(mRippleRect, mPaint);        Log.d("BreathingLayout", "onDraw=" + mRippleRect.toString());    }

结语

ObjectAnimator/ValueAnimator不单单可以用在常规缩放,位移动画中,也可于再自定义的属性,以及在很多需要线性变化的地方。

转载于:https://www.cnblogs.com/avenwu/p/4812228.html

你可能感兴趣的文章
MySQL ERROR 1071 (42000): Specified key was too...
查看>>
OPENCART模板 5 折
查看>>
OptionsMenu 详解
查看>>
linux 下 apache 单独安装独立模块
查看>>
从发明新的排序算法开始扯淡(四,挑战)
查看>>
JAVA学习笔记—JDK1.5的自动装箱与拆箱
查看>>
mini-springframework-简化版Spring实现设计
查看>>
快速开发基于 HTML5 网络拓扑图应用
查看>>
安全体系的国际标准
查看>>
我的友情链接
查看>>
Android开发学习笔记(14):OnTouch、OnClick、OnLongClick、OnFocusChange调用关系
查看>>
1--信息系统监理师知识框架图-(IS2-160523p)
查看>>
Nginx实现负载均衡
查看>>
基于Linux系统部署Web服务器
查看>>
CentOS6.3安装配置iscsi并实现自动挂载
查看>>
在Kubernetes中运行Spark集群
查看>>
VMware Horzion Workspace POC文档--安装2(集成VIEW)
查看>>
lvs-NAT模式的实现
查看>>
Tomcat ssl 实现
查看>>
人生感悟 --有理想的程序员必须知道的15件事
查看>>