窗口动画缩放,过渡动画缩放,Animator时长缩放_关闭动画缩放好不好

窗口动画缩放,过渡动画缩放,Animator时长缩放_关闭动画缩放好不好最近用到了ScaleAnimation来实现图片放大需求,今天就把使用过程中学习的一些东西总结记录一下,希望能对大家有所帮助。-ScaleAnimation是Android官方提供的动画类Animation的子类Animation类是一个抽象类,我们通常会使用它的四个子类AlphaAnimation、RotateAnimation、ScaleAnimation和TranslateAnimation,他们分别可以实现渐变动画、旋转动画、平移动画、缩放动画功能,当然我们今天的主角就是缩放动画Scal

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

最近用到了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"     	//动画持续时间,单位是毫秒,示例为动画持续700ms
    android: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);		//动画持续时间,单位是毫秒,示例为动画持续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类型的参数,因为博主我也没有用过,想要了解的读者就自己去源码或者别的博客里看吧。

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各有其天地。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181627.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Latex安装教程 (TeX Live 和 TeXStudio)

    Latex安装教程 (TeX Live 和 TeXStudio)文章目录TeXLive安装(1)进入官网[TexLive](http://tug.org/texlive/)(2)选择onDVD(3)选择downloadingtheTeXLiveISOimageandburningyourownDVD(4)选择downloadfromanearbyCTANmirror(5)选择texlive2020.iso下载(6)下载后解压:在解压后的文件中右击install-tl-windows->以管理员身份运行(7

    2022年5月25日
    54
  • pycharm2021.3激活码破解方法

    pycharm2021.3激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    372
  • java的三种工厂模式「建议收藏」

    java的三种工厂模式「建议收藏」一,简单的工厂模式首先举一个例子:我们现在开了一家饭馆:然后呢我们的大厨可以做三种菜,还有一句潇洒的抱怨:   下面客人进场,开始点餐:我们观察上面的代码,虽然很好的完成了任务,但是,我们的三个实现类和和借口紧密的绑定到了一起,这意味着我们的代码耦合出现严重问题,不利于以后的维护,试想顾客点餐需要与后厨大厨直接接触,这肯定是一个不好的体验,那…

    2022年7月7日
    22
  • vue 文件上传至服务器_oss文件服务器

    vue 文件上传至服务器_oss文件服务器为什么使用对象存储OSS很多企业的文件上传下载都是通过文件流的形式进行上传下载的,需要后端配合,对服务器压力很大,而且高消费,对公司损失太大,我们选择使用oss将尽可能地缩小成本,以及对网站及逆行大幅度提升使用对象存储OSS改变了什么网站数据动静分离,大幅提升网页性能 单独的文件管理界面,管理网站文件和本地电脑一样高效率方便使用 成本低,资源弹性伸缩,按需付费什么是对象存储OSS阿里云对象存储OSS(ObjectStorageService)是一款海量、安全、低成本、高可靠的云存储

    2022年8月15日
    6
  • linux+shell脚本100,shell脚本(shell编程100例)

    linux+shell脚本100,shell脚本(shell编程100例)ShellScript,Shell脚本与Windows/Dos下的批处理类似,也便是用各类指令预先放入到一个文件中,便利一次性执行的一个程序文件,主要是便利办理员进行设置或许办理用的。可是它比Windows下的批处理更强大,比用其他编程程序修改的程序功率更高,它使用了Linux/Unix下的指令。shell编程100例1、编写helloworld脚本#!/bin/bash#编写helloworld…

    2022年10月3日
    2
  • 关于getchar的用法及实例解析

    关于getchar的用法及实例解析getchar——读取字符的函数intgetchar(void)返回类型为int,参数为void.有人可能会有疑惑,getchar既然是读取字符的,为什么返回类型是int呢?1、getchar其实返回的是字符的ASCII码值(整数)。2、getchar在读取结束或者失败的时候,会返回EOF。EOF意思是endoffile,本质上是-1.下面我们一起来看看下面这段代码什么意思#include<stdio.h>intmain(){ intch=0; wh

    2022年10月19日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号