专栏首页用户3030674的专栏Android5.0新特性之——控件移动动画(初级)

Android5.0新特性之——控件移动动画(初级)

最近开发,UI大牛们设计了好多很炫酷吊炸天的动画,不由得重新学习了一下5.0的ObjectAnimator动画。

ObjectAnimator动画的原理,通过反射控件的setXXX方法,改变控件的实际属性值,来达到控件状态改变的动画效果。

首先话不多说,先上效果图。

我们先介绍几个演示效果中用到的ObjectAnimator的方法

我这里只针对ofInt()和ofFlot方法进行说明,其他的方法原理类似,这里不做过多说明。

首先是第一个字体变色的效果。这里用的是ofInt方法。代码比较简单:

          //设置色值
                ObjectAnimator textColorAnim = ObjectAnimator.ofInt(view, "textColor", 0xff000000, 0xff0000ff, 0xff00ff00);
                //设置动画时间
                textColorAnim.setDuration(3000);
                //设置重复模式
                textColorAnim.setRepeatMode(ValueAnimator.REVERSE);
                textColorAnim.start();

这里需要说明一点,我定义的view,是Button类型的控件,所以里面是有setTextColor这个属性的。其中可以看出我设置的是黑、蓝、绿三个颜色。但是我的效果图是有很多种颜色的变化,这是因为在从蓝色到绿色进行过度的时候,中间做了补间色的转变。具体的可以百度一下色盘。

第二个我们说一下ofFloat()方法,原理依然是设置控件,通过反射到控件的setXXX方法,对控件的属性进行更改。下面上代码:

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(btnRotationX, "rotationX", 0, 360);
objectAnimator.setDuration(3000);
objectAnimator.start();

这里说明一下,首先,在华为mate8和mate7系统下,控件的setRotationX方法和setRotationY这两个方法调用,会有问题。一旦调用,就会出现控件消失的情况。这里是华为系统的问题。不做过多的介绍。也就是如果在华为mate8和mate7系统下,调用这个动画,展示动画的控件,就会出现消失的问题。所以这里慎用!!!!!

最后说一个高级用法,自定义控件的动画效果。也就是效果图中的最后一个效果。

直接贴代码:

首先是自定义控件CustomView(这里为了节省篇幅,构造方法没有粘贴)

public class CustomView extends android.support.v7.widget.AppCompatTextView {
    private float redR=0;
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.FILL);
        paint.setAntiAlias(true);
        canvas.drawCircle(200,20,redR, paint);
    }

    public void setRedR(float redR) {
        this.redR = redR;
     //强制刷新页面
        invalidate();
    }
}

布局文件:

就不贴代码了,不同的目录下,控件的引用方式也是不一样的。这里提醒一下,记得写上控件的宽高,我写的高是100dp,宽是全屏。

动画代码:

        ObjectAnimator redR = ObjectAnimator.ofFloat(custom, "redR", 0, 100);
        redR.setDuration(3000);
        redR.setRepeatCount(ValueAnimator.INFINITE);
        redR.setRepeatMode(ValueAnimator.REVERSE);
        redR.start();

自定义控件,就是通过映射custom的setRedR方法,进行动态的更改custom的属性值。

如有不足之处,请各位大牛进行指导

我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。

 我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=11fyo5nbpnz79

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GreenDao教程2

    可以多次使用where(),进行多次筛选,也可以使用whereOr()语句,进行或语句查找

    用户3030674
  • android TextView描边

    上一篇已经讲了如何实现textView中粗字体效果,里面主要重写了onDraw方法。

    用户3030674
  • Android事件分发机制详解

    1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP等

    用户3030674
  • 未来布局之星——ConstraintLayout

    ConstraintLayout是Android Studio 2.2中具有亮点的新功能之一,相比于RelativeLayout、LinearLayout等传统...

    代码咖啡
  • 院士谭铁牛:智能化时代生物识别的机遇与挑战(附报告全文)

    大数据文摘
  • 大数据工程师(开发)面试题(附答案)

    MapReduce 1. 不指定语言,写一个WordCount的MapReduce 我:最近刚学了scala,并且就有scala版本的WordCount,刚好学...

    机器学习AI算法工程
  • 实现高效端口扫描

    Python-nmap介绍: http://xael.org/pages/python-nmap-en.html

    用户5766185
  • Qt编写自定义控件20-自定义饼图

    上次在写可视化数据大屏电子看板项目的时候,为了逐步移除对QChart的依赖(主要是因为QChart真的太垃圾了,是所有Qt的模块中源码最烂的一个,看过源码的人没...

    feiyangqingyun
  • Swift编写的EOS区块链开源框架SwiftyEOS

    SwiftyEOS是一个用于与EOS交互的开源框架,用Swift编写。可以在iOS和macOS上使用。

    笔阁
  • 基于 Robotium 自动化测试工程从 Eclipse 迁移至 Android Studio

    本文记录介绍在Eclipse上的基于Robotium自动化测试工程如何迁移至Android Studio,如何配置项目,及如何基于gradle持续构建测试工程。

    腾讯移动品质中心TMQ

扫码关注云+社区

领取腾讯云代金券