同步发表于 http://avenwu.net/customlayout/2015/04/06/custom_property_animation/

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

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

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

思路

  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<BreathingDelegate, Float> mRadiusProperty = new Property<BreathingDelegate, Float>(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不单单可以用在常规缩放,位移动画中,也可于再自定义的属性,以及在很多需要线性变化的地方。

自定义Property属性动画的更多相关文章

  1. Android动画效果之Property Animation进阶(属性动画)

    前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...

  2. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  3. Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提 供了几种动画类型:View Anima ...

  4. 【转】Android 属性动画(Property Animation) 完全解析 (上)

    http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animation .Dra ...

  5. Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation

    程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animatio ...

  6. Android(java)学习笔记263:Android下的属性动画(Property Animation)

    1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(fra ...

  7. 自定义 Layer 属性的动画

    默认情况下,CALayer 及其子类的绝大部分标准属性都可以执行动画,无论是添加一个 CAAnimation 到 Layer(显式动画),亦或是为属性指定一个动作然后修改它(隐式动画).   但有时候 ...

  8. Android 属性动画(Property Animation) 完全解析 (下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38092093 上一篇Android 属性动画(Property Animatio ...

  9. 【属性动画总结】Property Animation

    属性动画概述 3.0以前,android仅支持两种动画模式,tweened animation 和 frame-by-frame animation,在android3.0中又引入了一个新的动画系统: ...

随机推荐

  1. pictures of you

    http://pan.baidu.com/s/1dEAiwnB 给某人的. I've been looking so long at these pictures of you 我已对着你的照片凝视太 ...

  2. C++堆栈生长方向

    栈区:临时区 #include <iostream> using namespace std; #include <stdio.h> int main() { ; ; cout ...

  3. 在mac中自动保存git用户名与密码如此简单

    之前为了实现在Windows中自动保存git用户名与密码,写过一篇博客终于解决“Git Windows客户端保存用户名与密码”的问题,需要进行一堆配置. 而在Mac OS X中这个操作竟然如此简单.只 ...

  4. Html5文件

    HTML5 file api 读取文件MD5码 http://www.zhuwenlong.com/blog/52d6769f93dcae3050000003

  5. easyui combobox 中实现 checkbox

    $('#cc').combobox({ url:'combobox_data1.json', method:'get', valueField:'id', textField:'text', pane ...

  6. 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接

    长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...

  7. 通俗易懂的深入理解js闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...

  8. CSS3与页面布局学习总结

    目录 一.BFC与IFC 1.1.BFC与IFC概要 1.2.如何产生BFC 1.3.BFC的作用与特点 二.定位 2.2.relative 2.3.absolute 2.4.fixed 2.5.z- ...

  9. 如何利用tomcat搭建一个动态服务器

    这篇文章只记录已解压缩包的方式安装,通常linux服务器上也是这样. 1.下载tomcat.zip压缩包. http://tomcat.apache.org/download-70.cgi 2.把zi ...

  10. JAVA开发工具eclipse中@author怎么改

    1:JAVA开发工具eclipse中@author怎么改,开发的时候为了注明版权信息. 用eclipse开发工具默认的是系统用户,那么怎么修改呢 示例如图所示 首先打开Eclipse--->然后 ...