美文网首页
自定义动画属性

自定义动画属性

作者: OhIAm | 来源:发表于2017-04-11 19:01 被阅读0次

今天项目遇到了动画属性方面的问题,看了一下代码,发现动画的属性怎么不是我们平时用的''alpha"、"translationX"的属性,好吧,原来是可以自己定义动画属性名的。
下面是以我项目中的问题做例子:

  1. 自定义一个view
public class ScaleView extends View {
 
    public ScaleView(Context context) {
        this(context, null);
    }

    public ScaleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }
}

  1. 给自定义的动画属性定义一个属性名,如我们平常使用的"translationX"、"translationY"、"alpha"等,在这里,我以'"myScale"为动画属性的名字,用这个这个属性来同时实现view的"scaleX"、"scaleY"的属性变化。

当然,自己可以组合,实现各种想要的动画,然后只要通过这个属性名,
就可以实现所要的动画,不用一个一个加到动画集合中了。

  1. 在自定义的view中,实现属性的settter和getter方法,这个是很重要的,没有实现的话,在开始动画的时候,就会因为取不到属性值而崩溃。
    异常可能如下:
 E/PropertyValuesHolder: Couldn't find no-arg method for property myScale: java.lang.NoSuchMethodException: getMyScale[]
E/AndroidRuntime: FATAL EXCEPTION: main
                                      java.lang.NullPointerException
                                      at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:513)
                                      at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:392)
                                      at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:544)
                                      at android.animation.ValueAnimator.start(ValueAnimator.java:934)
                                      at android.animation.ValueAnimator.start(ValueAnimator.java:957)
                                      at android.animation.ObjectAnimator.start(ObjectAnimator.java:370)

在这里,我定义的方法为:

private float mScaleFraction;//保存fraction的值,在动画开始后,自动调用这两个方法
public void setMyScale(float fraction) {
    mScaleFraction = fraction;
    setScaleX(1f + fraction * 0.5f);//x、y都是放大0.5倍
    setScaleY(1f + fraction * 0.5f);
}

 public float getMyScale() {
     return mScaleFraction;
 }

注意 : 上面这两个方法是动画执行时自动调用fraction的范围就是我们在定义动画时传入的,如ObjectAnimatior.ofFloat(targetObject, "myScale", 0f, 1f),其中0f、1f就是fraction变化的范围。

4 使用的话,跟我们平常使用动画是一样的。

  ScaleView mScaleView;
  ObjectAnimator animator = ObjectAnimator.ofFloat(mScaleView, "myScale", 0.0f, 1.0f);
                animator.setDuration(3000);
                animator.setRepeatCount(2);
                animator.setRepeatMode(ValueAnimator.REVERSE);
                animator.start();

注意:传入的属性名的命名,以我这里为例:"myScale", 那么在getter和setter中,就要以setMyScale(float)和getMyScale()为方法名了。

相关文章

  • Android - 自定义View和属性动画 ValueAnim

    自定义View和属性动画ValueAnimator实现圆点指示器 自定义View和属性动画相结合实现支持动态修改指...

  • 三谈属性动画——Keyframe以及ViewPropertyAn

    经过初识属性动画——使用Animator创建动画和再谈属性动画——介绍以及自定义Interpolator插值器,对...

  • Android 自定义属性实现3D翻转动效

    上一篇文章介绍了属性动画以及如何自定义属性动画,如果关于自定义属性动画你还存在疑问请回去查看上一篇:Android...

  • Android学习感悟之属性动画

    本篇包括Android属性动画的基本使用,理解插值器和估值器,自定义属性动画 简介 属性动画是Android3.0...

  • Android知识总结

    一、Android动画 Android 属性动画:这是一篇很详细的 属性动画 总结&攻略 二、自定义View 爱哥...

  • 动画深入研究

    前言 分类 View动画,帧动画,自定义View动画,属性动画 View动画 平移,缩放,旋转,透明Transla...

  • CoreAnimation之自定义动画属性

    看完苹果文档,我们知道layer可以自定义属性动画的。但是具体怎么实现自定义动画的属性,苹果并没有举例。因此这里做...

  • 自定义view(三)----自定义字体变色

    上一篇文章我们使用属性动画实现了自定义view的动画效果,这篇文章主要是结合属性动画自定义一个文字变色的view。...

  • Android 属性动画(ObjectAnimator)

    属性动画: 控制属性来实现动画。特点:最为强大的动画,弥补了补间动画的缺点,实现位置+视觉的变化。并且可以自定义插...

  • ios动画---- 显式动画

    显式动画 显式动画,它能够对一些属性做指定的自定义动画,或者创建非线性动画,比如沿着任意一条曲线移动。 属性动画 ...

网友评论

      本文标题:自定义动画属性

      本文链接:https://www.haomeiwen.com/subject/pnjyattx.html