大家好,又见面了,我是你们的朋友全栈君。
最近用到了ScaleAnimation来实现图片放大需求,今天就把使用过程中学习的一些东西总结记录一下,希望能对大家有所帮助。
Animation类是一个抽象类,我们通常会使用它的四个子类AlphaAnimation、RotateAnimation、ScaleAnimation和TranslateAnimation,他们分别可以实现渐变动画、旋转动画、平移动画、缩放动画 功能,当然我们今天的主角就是缩放动画 ScaleAnimation。
要用到ScaleAnimation,我们最好先了解Android的坐标,当然这并不是我们这篇文章的重点,所以我就在这里放一篇我学习坐标时看的博客,供大家参考一下,不具体展开讲解了,想要深入了解的朋友可以去找找别的相关博客。
https://blog.csdn.net/lvxiangan/article/details/19971509
我们先从源码来看看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 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" //动画持续时间,单位是毫秒,示例为动画持续700ms
android:fillAfter="true" //动画结束后,保持结束时的状态
android:fillBefore="true" //用于确定动画开始时,View的动画属性值;
android:fillEnabled="true" //用来控制fillBefore属性是否有效
android:repeatCount="5" //重复次数,取值为-1时无限重复,默认动画执行一次
android:repeatMode ="reverse"//重复模式,有reverse和restart两个值,前者为倒序回放,后者为重新开始
/>
对代码中比较复杂的几个属性,再详细讲一下:
在使用代码调用构造方法来实现属性注入的方式时,ScaleAnimation给出了两种传参个数不同的构造方法,我们来一个一个介绍。
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);
}
}
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,我们还需要设置一些参数,且XML方式中,我们还没有进行对象的实例化,下面就来具体操作一下吧。
public class Test{
private void test(){
....
//注意这里传入的的两个参数,要根据自己的类名和文件名切换
ScaleAnimation animation = AnimationUtils.loadAnimation(AnimDemoActivity.this,R.anim.scale;
//让执行动画的view对象调用启动方法
view.startAnimation(scaleAnimation);
}
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); //动画持续时间,单位是毫秒,示例为动画持续200ms
animation.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类型的参数,因为博主我也没有用过,想要了解的读者就自己去源码或者别的博客里看吧。
因为在选择实现方式时也曾了解过Animator的用法,感觉挺有趣的,所以最后的最后,我们再来看一下这个已经不算新来的新伙计,当然主要还是聊下他与Animation的不同啦,具体的介绍那可说来话长,就不说了。
当然在具体选择使用Animation还是Animator时就要考虑实际需求来决定啦,功能强大的兼容性和执行效率上不一定好,Animation和Animator各有其天地。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181627.html原文链接:https://javaforall.cn