最近用到了ScaleAnimation来实现图片放大需求,今天就把使用过程中学习的一些东西总结记录一下,希望能对大家有所帮助。

- ScaleAnimation是 Android官方提供的动画类Animation的子类

Animation类是一个抽象类,我们通常会使用它的四个子类AlphaAnimationRotateAnimationScaleAnimationTranslateAnimation,他们分别可以实现渐变动画旋转动画平移动画缩放动画 功能,当然我们今天的主角就是缩放动画 ScaleAnimation

Android中的坐标

要用到ScaleAnimation,我们最好先了解Android的坐标,当然这并不是我们这篇文章的重点,所以我就在这里放一篇我学习坐标时看的博客,供大家参考一下,不具体展开讲解了,想要深入了解的朋友可以去找找别的相关博客。

https://blog.csdn.net/lvxiangan/article/details/19971509

ScaleAnimation的属性

我们先从源码来看看ScaleAnimation的诸多属性,mFromX、mToX、mFromY、mToY和mPivotXType、mPivotXValue、mPivotYType、mPivotYValue这八个属性可以通过XML或代码调用构造方法来注入。

public class ScaleAnimation extends Animation {private float mFromX;   //动画开始前X坐标比例private float mToX;       //动画开始后X坐标比例private float mFromY;   //动画开始前Y坐标比例private float mToY;     //动画开始后Y坐标比例//动画开始前X坐标类型private int mFromXType = TypedValue.TYPE_NULL;//动画开始后X坐标类型private int mToXType = TypedValue.TYPE_NULL;//动画开始前Y坐标类型private int mFromYType = TypedValue.TYPE_NULL;//动画开始后Y坐标类型private int mToYType = TypedValue.TYPE_NULL;private int mPivotXType = ABSOLUTE; //缩放中心点的X坐标类型private int mPivotYType = ABSOLUTE;  //缩放中心点的Y坐标类型private float mPivotXValue = 0.0f;    //缩放中心点的X坐标比例private float mPivotYValue = 0.0f;    //缩放中心点的Y坐标比例private float mPivotX; private float mPivotY;
}
  • 接下来,我们尝试一下XML方式的属性注入
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"  android:fromXScale="1.0"    //起始x尺寸比例,示例为1.0即原比例放大  android:toXScale="1.4"        //最终x尺寸比例,示例为1.4即放大为原来的1.4倍android:fromYScale="1.0"   //起始y尺寸比例,,示例为1.0即原比例放大android:toYScale="1.4"      //最终y尺寸比例,示例为1.4即放大为原来的1.4倍android:pivotX="50%"       //缩放起点x轴坐标android:pivotY="50%"        //缩放起点Y轴坐标android:duration="700"        //动画持续时间,单位是毫秒,示例为动画持续700msandroid:fillAfter="true"    //动画结束后,保持结束时的状态android:fillBefore="true"  //用于确定动画开始时,View的动画属性值;android:fillEnabled="true" //用来控制fillBefore属性是否有效android:repeatCount="5"        //重复次数,取值为-1时无限重复,默认动画执行一次android:repeatMode ="reverse"//重复模式,有reverse和restart两个值,前者为倒序回放,后者为重新开始        />

对代码中比较复杂的几个属性,再详细讲一下:

  • pivotX:取值可以是数值(50)百分数(50%)百分数p(50%p),当取值为数值时,缩放起点为View左上角坐标加具体数值像素;当取值为百分数时,表示在当前View左上角坐标,加上View宽度的具体百分比;当取值为百分数p时,表示在View左上角坐标加上父控件宽度的具体百分比。

  • pivotY:用法与pivotX相同。

  • fillBefore:代码注释中所说的动画开始不是指的调startAnimation方法,而是界面中动画真正开始动的时候。从调用startAnimation到动画真正开始,中间有一个startOffset阶段,若fillBeforetrue,则在startOffset阶段时,将动画属性设置为初始值,为false,则为View本身的初始值。

  • fillEnabled:用来控制fillBefore属性是否有效,若为true,则fillBefore生效;若为false则不管设置fillBefore为true还是false,都不起作用。但是,划重点了,当fillEnabled为false时,我们假设fillBefore为true。也就是说,当 fillEnabled为false时,不管fillBefore是什么值,在startOffset阶段都将初始值设置为动画属性的初始值。

在使用代码调用构造方法来实现属性注入的方式时,ScaleAnimation给出了两种传参个数不同的构造方法,我们来一个一个介绍。

  • 首先是传入参数较多的那个,传入了八个参数,fromX、toX、fromY、toY和pivotXType、pivotXValue、pivotYType、pivotYValue

    虽然这些参数上文已经有过说明,为了阅读方便,再次介绍一下。

    • fromX:动画开始前X坐标比例
    • toX:动画开始后X坐标的比例
    • fromY:动画开始前Y坐标的比例
    • toY:动画开始后Y坐标的比例
    • pivotXType:缩放中心点的X坐标类型
    • pivotXValue:缩放中心点的X坐标比例
    • pivotYType:缩放中心点的Y坐标类型
    • pivotYValue:缩放中心点的Y坐标比例
public class Test{private void test(){....//示例传参实现的是,以控件中心为缩放点,从原图即1.0倍放大到1.4倍ScaleAnimation animation = new ScaleAnimation(1.0F, 1.4F, 1.0F, 1.4F, 1, 0.5F, 1, 0.5F);}
}
  • 接下来实现的是传入参数较少的构造方法,传入六个参数,fromX、toX、fromY、toY和pivotX、pivotY,关于参数已介绍多次,不再赘述。
public class Test{private void test(){....//示例传参实现的是,以控件中心为缩放点,从1.0倍缩小到0.5倍,即原图的二分之一,不设置缩放点类型,默认坐标原点以控件为准ScaleAnimation animation = new ScaleAnimation(1.0F, 0.5F, 1.0F, 0.5F, 0.5F, 0.5F);}
}

ScaleAnimation的实际使用

上面给出的例子只是完成了属性的注入,真正要使用ScaleAnimation,我们还需要设置一些参数,且XML方式中,我们还没有进行对象的实例化,下面就来具体操作一下吧。

  • 在XML中,我们已经完成了所需要的全部属性设定,所以在代码中我们只要传入我们创建的XML文件来实例化对象之后,就可以启动动画啦。
public class Test{private void test(){....//注意这里传入的的两个参数,要根据自己的类名和文件名切换ScaleAnimation animation = AnimationUtils.loadAnimation(AnimDemoActivity.this,R.anim.scale;//让执行动画的view对象调用启动方法view.startAnimation(scaleAnimation);}
  • 重载的两种不同构造方法并不会影响我们之后的代码书写,所以只给出一份代码示例,请注意,构造对象时传入的参数并不是我们能设置的全部属性,可以对比一下前面的XML文件内容。
public class Test{private void test(){....//这里是上文用过的实例化对象示例,不再介绍ScaleAnimation animation = new ScaleAnimation(1.0F, 1.4F, 1.0F, 1.4F, 1, 0.5F, 1, 0.5F);animation.setDuration(200);      //动画持续时间,单位是毫秒,示例为动画持续200msanimation.setFillAfter(true);  //动画结束后,保持结束时的状态animation.setFillBefore(true);   //用于确定动画开始时,View的动画属性值;animation.setFillEnabled(true);    //用来控制fillBefore属性是否有效animation.setRepeatCount(1);  //重复次数,取值为-1时无限重复,默认动画执行一次animation.setRepeatMode(Animation.REVERSE);    //重复模式,有reverse和restart两个值,前者为倒序回放,后者为重新开始//让执行动画的view对象调用启动方法view.startAnimation(scaleAnimation);}
}

其实除了上文代码和XML文件中设置的属性之外,ScaleAnimation还提供了一些别的可以功能属性,比如setStartTime() 方法,设置启动的时间,传入一个Long类型的参数,因为博主我也没有用过,想要了解的读者就自己去源码或者别的博客里看吧。

Animation与Animator

因为在选择实现方式时也曾了解过Animator的用法,感觉挺有趣的,所以最后的最后,我们再来看一下这个已经不算新来的新伙计,当然主要还是聊下他与Animation的不同啦,具体的介绍那可说来话长,就不说了。

  1. Animation是Android发行之时就存在的动画框架,而animator是在之后的版本才新加入的,在兼容性上,Animation肯定是优于后来者的。
  2. Animation动画并不实际改变view的坐标值,只是在视图上实现动画,而Animator则会改变view的坐标值,这点我深有体会,在实现图片放大需求时,我有试过监听Animation动画实现前后view的坐标值,然后发现view的坐标值并不会发生变化,同时放大的图片还覆盖了下方的文字,而文字在layout的布局设置了相对图片的below属性。
  3. Animation只能对view执行动画,而Animator功能更加强大,他不仅可以针对 view执行动画, 还可以对所有的 Object 执行动画。

当然在具体选择使用Animation还是Animator时就要考虑实际需求来决定啦,功能强大的兼容性和执行效率上不一定好,Animation和Animator各有其天地。

缩放动画 ScaleAnimation 总结相关推荐

  1. 缩放动画 ScaleAnimation

    缩放动画可以演示一个视图在宽高上的渐变效果.它的主要属性有: fromXScale动画起始时 X坐标上的伸缩倍数 0.0表示收缩到没有 fromYScale动画起始时 Y坐标上的伸缩倍数 toXSca ...

  2. 补间动画详解五 缩放动画ScaleAnimation

    ScaleAnimation是尺寸变化动画的类,控制View的尺寸变化. ScaleAnimation类官方文档: https://developer.android.com/reference/an ...

  3. AndroidUI 视图动画-缩放动画效果 (ScaleAnimation)

    放动画效果,可以使用ScaleAnimation: <Buttonandroid:id="@+id/btnScale2"android:layout_width=" ...

  4. Android的动画:ScaleAnimation,AlphaAnimation,RotateAnimation,TranslateAnimation,Code,DrawableAnimation

    简介 动画有下面两种情况同一个图形通过视图在界面上进行透明度,缩放,旋转,平移的变化(View动画)在界面的同一个位置上不断切换显示不同的图片(Drawable动画)动画的分类View Animati ...

  5. ScaleAnimation 缩放动画效果

    ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int ...

  6. Android 动画 - ScaleAnimation 缩放动画使用(附图)

    ScaleAnimation:缩放动画 同样,创建ScaleAnimation也有两种方式 XML文件+Java代码 Java代码方式 XML文件+Java代码 效果图: 文件目录:res/anim/ ...

  7. android scaleanimation动画,Android 的ScaleAnimation 缩放动画基本运用

    因为今天用到了ScaleAnimation缩放动画就写一下,加深一下印象. 用ScaleAnimation有几个重载方法,这里就将八个参数的重载方法. ScaleAnimation(float fro ...

  8. 缩进动画Scaleanimation的一个小示例

    根据之前所学的所有动画,我们都可以在不同的实例中将动画效果添加进去,让界面更灵活美观,下面我就用一个简单的ListView来实现添加动画效果: 一.要实现的效果: 一组ListView数组,当打开页面 ...

  9. android缩放动画的两种实现方法

    在android开发.我们会常常使用到缩放动画,普通情况下缩放动画有两种实现方式.一种是直接通过java代码去实现,第二种是通过配置文件实现动画,以下是两种动画的基本是用法: Java代码实现: // ...

最新文章

  1. Awk使用案例总结(运维必会)
  2. linux kernel rcu 读复制更新 并发控制机制 简介
  3. Dictionary转为Model实例
  4. 使用WebRTC开发Android Messenger:第2部分
  5. 时序分析:Kalman滤波(状态空间)
  6. c# 2.0 Factory的实现
  7. c#解析json字符串数组_C#解析JSON字符串总结
  8. HDU #5733 tetrahedron
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_9_JDK7和JDK9流中异常的处理...
  10. mysql数据库rpm包安装_Linux rpm包安装MySQL数据库问题总结
  11. windows安装VS2015
  12. VRay材质练习(一):水、玻璃、牛奶
  13. win10分辨率设置_win10分辨率设置方法教程
  14. MATLAB实现语音信号的读取
  15. 运行django项目报错Couldn‘t import Django
  16. 【CXY】JAVA基础 之 异常
  17. MindMapper日期该如何进行选定
  18. S7-1500+ET200SP分布式IO通信时的注意事项汇总
  19. AUTOSAR FOUNDATION文档——Foundation Release Overview
  20. 找工作,在51job和chinahr上投了很多简历,回复的太少了。帮忙看下我的简历

热门文章

  1. 云视通2.0本地开发新方案
  2. ZYJ7道岔控制电路图【铁路信号技术专栏】--转自微信公众号铁路信号技术交流
  3. 【Java】错误: 在类 Test1.Test2 中找不到 main 方法, 请将 main 方法定义为:    public static void main(String[] args)的解决方案
  4. 2004-12-12
  5. 木塔老师火山PC大漠多线程中控+内存逆向系列教程
  6. ansible-playbook编译安装nginx
  7. 优傲机器人UR+伙伴亮相工业博览会
  8. fcpx插件保存位置你知道吗?final cut pro x插件卸载教程!
  9. 大学培养模式之CDIO回忆录
  10. opencv项目实战(二)——文档扫描OCR识别