Android Animation之ScaleAnimation用法详解[通俗易懂]
ScaleAnimation用法详解
ScaleAnimation是Animation的子类,其有四个构造方法:
1、public ScaleAnimation(Context context, AttributeSet attrs) 方法的两个参数中context就不再解释了,上下文变量,attrs是属性集。一般很少利用该构造方法构造ScaleAnimation,因为还要在XML文件里设置属性的值,比较麻烦,不建议使用。
2、public ScaleAnimation(float fromX, float toX, float fromY, float toY)
fromX表示x坐标轴上动画的起始位置,这个值并不是坐标,而是一个比例,比如fromX=0.5f,那么就表示播放动画的控件的x坐标都要乘以0.5,这是播放动画时控件的初始的x轴的状态,toX表示动画结束时控件x轴方向的位置,同样也是个比例,比如toX=1.0f,那么动画结束时x轴方向上控件恢复原状,fromY和toY是Y分别是表示Y轴方向上动画的初始位置和结束位置,也都是一个比例值。该情况下下坐标系是控件左上角为原点的。
代码例子:
final Animation testAnimation = newScaleAnimation(0.5f,1.0f,1.0f,1.0f);
testAnimation.setFillAfter(true);
testAnimation.setDuration(1000);
imageView.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
imageView.startAnimation(testAnimation);
}
});
代码解读:动画一开始的时候,控件的每个点的x坐标都乘以0.5,y坐标不变,即水平方向上向左压缩一半,动画结束的时候控件的每个点的x坐标恢复原值,y坐标也为原始值。setFillAfter(true)的作用是动画结束时保持结束的位置不动,setDuration(1000)是将动画时长设为1000ms。
3、public ScaleAnimation(float fromX, float toX, float fromY, float toY,float pivotX,float pivotY)
该构造方法中有6个参数,前4个参数的意义和构造方法2的参数一样,不再赘述,这里重点说一下后两个参数的用法,pivotX和pivotY是一个点的横、纵坐标,这个坐标是真正的坐标值,而不再是一个比例,坐标系还是取控件的左上点为原点,我们记这个点为P,点P有什么作用呢?它的作用就是作为一个固定点,在动画播放的过程中,这个点保持不动,而周围的点围绕着这点进行缩放。在构造方法2中,pivotX和pivotY的值都为0,即相对于控件的左上角的那个点进行缩放变换。
代码举例:
final Animation testAnimation = newScaleAnimation(0.5f,0.8f,0.5f,0.8f,500.0f,0.0f);
testAnimation.setFillAfter(true);
testAnimation.setDuration(1000);
imageView.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
imageView.startAnimation(testAnimation);
}
});
代码解读:初始化动画的时候,后两个参数为500.0f和0.0f,这意味着缩放要围绕点(500.0f,0.0f)进行,变换过程为控件的各个点的x坐标从(500-x)*0.5+x变化到(500-x)*0.8+x,y坐标从(500-y)*0.5+y变化到(500-y)*0.8+y,当然,x轴方向和y轴方向的变化是同时进行的。
4、public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType,floatpivotXValue, int pivotYType, float pivotYValue)
该构造方法一共有8个参数,前4个参数的意义和构造方法2的4个参数相同,这里重点说一下后面4个参数的意义,总的来说后面4个参数的作用和构造方法3的后两个参数一样,是为了设定一个固定点,使得缩放是相对于这个固定点进行的。pivotXType和pivotYType指定的是一种类型,这两个参数的值一般是一致的,取值是Animation. ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT三者之一。
(1) 如果pivotXType和pivotYType取值为Animation. ABSOLUTE,那么pivotXValue和pivotYValue表示的是坐标的绝对值,这时构造方法4的所起的的效果和构造方法3相同,这里不再详细解释了;
(2) 如果pivotXType和pivotYType取值为Animation. RELATIVE_TO_SELF,pivotXValue和pivotYValue的值的是百分比(1表示100%),缩放的固定点就是(width*pivotXValue,height*pivotYValue),width和height分别是控件的宽度和高度,坐标系的原点还是控件的左上角。比如pivotXValue = 0.5f, pivotYValue=0.5f,那么所设定的固定点就是控件的中心点,缩放动画是相对于控件的中心进行的,代码举例:
final Animation testAnimation = newScaleAnimation(0.5f,0.8f,0.5f,0.8f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
imageView.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
imageView.startAnimation(testAnimation);
}
});
testAnimation.setFillAfter(true);
testAnimation.setDuration(1000);
(3) 如果pivotXType和pivotYType取值为Animation. RELATIVE_TO_Parent,pivotXValue和pivotYValue的值的是百分比(1表示100%),缩放的固定点就是(width*pivotXValue,height*pivotYValue),width和height分别是控件的父容器的宽度和高度,坐标系的原点还是该控件的左上角。比如pivotXValue = 0.5f, pivotYValue=0.5f,那么所设定的固定点就是控件的中心点,缩放动画是相对于控件的中心进行的,代码举例:
final Animation testAnimation = newScaleAnimation(0.5f,0.8f,0.5f,0.8f,Animation.RELATIVE_TO_PARENT,0.0f,Animation.RELATIVE_TO_PARENT,0.5f);
imageView.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
imageView.startAnimation(testAnimation);
}
});
testAnimation.setFillAfter(true);
testAnimation.setDuration(1000);
以上是ScaleAnimation的4种构造方法的简单讲解,一般初始化后,在设定一些属性值,比如setFillAfter、setDuration之后,就可以给控件用了,调用方法是View.startAnimation(Animation anim)。理解ScaleAnimation的构造方法的参数的准确意义,基本上就可以满足对缩放动画的基本的需求了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181488.html原文链接:https://javaforall.cn
相关文章
- android scaleanimation动画,【Android动画九章】-RotateAnimation(旋转动画)和ScaleAnimation(尺寸动画)…[通俗易懂]
- Failed to find Platform SDK with path: platforms;android-30「建议收藏」
- android+制作开机动画,Android 开机动画制作详解
- android开机动画多长时间_Android开机动画及黑屏[通俗易懂]
- android 混淆规则作用,Android代码混淆详解
- Android中定时器的使用
- android adb shell 常用命令
- android activity singletask,Android Activity启动模式之singleTask实例详解
- 如何让Android平台像IPC一样实现GB28181前端设备接入
- Android平台GB28181设备接入端PTZ指令对接详解
- Android Activity调整改变成Dialog详解手机开发
- Android最新Glide 4.0使用简介详解手机开发
- Android控制文字水平间距android:letterSpacing详解手机开发
- 用于 APP 测试的 10 大 Android 设备详解手机开发
- Android中SQLite数据操作详解手机开发
- Android 判断用户2G/3G/4G移动数据网络详解手机开发
- Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局详解手机开发
- [android] 网络链接类型和渠道详解手机开发
- [android] 安卓消息推送的几种实现方式详解手机开发
- android 二维码简化,实现仿qq扫描效果详解手机开发
- android系统分层详解手机开发
- Android中android:visibility的3中属性的剖析详解手机开发
- C/C++在Java、Android和Objective-C三大平台下实现混合编程详解编程语言
- 17 位谷歌 Android 开发专家是如何看待 Kotlin 的详解编程语言
- Android分辨率处理工具类详解编程语言
- Android Studio更新失败详解编程语言
- WebSocket实现android消息推送详解编程语言
- android教程之service使用方法示例详解