Android动画之ScaleAnimation使用[通俗易懂]

Android动画之ScaleAnimation使用[通俗易懂]什么是ScaleAnimationScaleAnimation即缩放动画,应用场景特别多,比如常见的隐藏菜单点击显示下面我分两种方式来介绍ScaleAnimation如何使用。1.xml文件形式文件名:anim_scale_in.xml效果:呈现view放大显示效果源码:

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

Jetbrains全系列IDE稳定放心使用

什么是ScaleAnimation

ScaleAnimation即缩放动画,应用场景特别多,比如常见的隐藏菜单点击显示

下面我分两种方式来介绍ScaleAnimation如何使用。

1. xml文件形式
文件名:anim_scale_in.xml
效果:呈现view放大显示效果
源码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/decelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fromXScale="0.0" android:fromYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" />
</set>

属性解释:
interpolator:动画插入器,该功能在xml里设置貌似无效,需在代码中加
fromXScale:从自身x轴长度多少倍开始缩放,如:fromXScale= 0.5表示从自身X轴长度0.5倍开始缩放
toXScale:缩放到自身x轴长度多少倍结束,如:toXScale = 2.0表示x轴缩放到自身x轴长度2倍结束
上面两条意思就是:该view的x轴从自身x轴长度的0.5倍开始缩放到自身x轴长度的2倍结束
fromYScale:从自身y轴长度多少倍开始缩放,如:fromYScale= 0.5表示从自身y轴长度0.5倍开始缩放
toYScale:缩放到自身y轴长度多少倍结束,如:toYScale = 2.0表示x轴缩放到自身y轴长度2倍结束
pivotX:动画相对于控件X坐标的开始位置
pivotY:动画相对于控件Y坐标的开始位置
如:pivotX = 50%,pivotY = 50% 表示从该控件的中心开始缩放

   //表示控件左下角开始
   android:pivotX="0"
   android:pivotY="100%"

   //表示控件左上角开始
   android:pivotX="0"
   android:pivotY="0"

   //表示控件右下角开始
    android:pivotX="100%"
    android:pivotY="100%"

   //表示控件右上角开始
   android:pivotX="100%"
   android:pivotY="0"

………………………………………………………………………………………………………………….
文件名:anim_scale_out.xml
效果: 呈现view缩小的效果
源码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/accelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0" android:toYScale="0" />
</set>

………………………………………………………………………………………………………………….

OK,现在有了xml布局文件,我们需要用Java代码让他工作起来,如下;
 /** * 缩放变大动画 * * @param context * @param view 目标view */
    public static void startScaleInAnim(Context context, View view) {
        Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_scale_in);
        if (view != null)
            view.startAnimation(animation);
    }

    /** * 缩放缩小动画 * * @param context * @param view 目标view */
    public static void startScaleOutAnim(Context context, View view) {
        Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_scale_out);
        if (view != null)
            view.startAnimation(animation);
    }

我单独封装在一个动画工具类中,哪里需要就哪里调用。很方便


2.纯Java代码形式

updating……

下面看看代码的执行效果:
这里写图片描述

缩放同时还可以添加透明度变化,如下:

放大+淡入:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/decelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fillEnabled="true" android:fromXScale="0" android:fromYScale="0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" />
    <!--同时配置淡入功能-->
    <alpha  android:duration="700" android:fillAfter="true" android:fromAlpha="0" android:toAlpha="1" />
</set>

缩小+淡出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/accelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0" android:toYScale="0" />
    <!--同时配置淡出功能-->
    <alpha  android:duration="700" android:fillAfter="true" android:fromAlpha="1" android:toAlpha="0" />
</set>

效果如下:
这里写图片描述

下拉菜单显示与收回,效果:

显示:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/decelerate_interpolator" android:duration="300" android:fillAfter="true" android:fillEnabled="true" android:fromXScale="1.0" android:fromYScale="0" android:pivotX="100%" android:pivotY="0" android:toXScale="1.0" android:toYScale="1.0" />
    <!--同时配置淡入功能-->
    <alpha  android:duration="300" android:fillAfter="true" android:fromAlpha="0" android:toAlpha="1" />
</set>

收起:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/accelerate_interpolator" android:duration="300" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="100%" android:pivotY="0" android:toXScale="1.0" android:toYScale="0" />
    <!--同时配置淡出功能-->
    <alpha  android:duration="300" android:fillAfter="true" android:fromAlpha="1" android:toAlpha="0" />
</set>

效果:
这里写图片描述

缩放下拉与收回效果:

显示:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/decelerate_interpolator" android:duration="200" android:fillAfter="true" android:fillEnabled="true" android:fromXScale="0" android:fromYScale="0" android:pivotX="100%" android:pivotY="0" android:toXScale="1.0" android:toYScale="1.0" />
    <!--同时配置淡入功能-->
    <alpha  android:duration="200" android:fillAfter="true" android:fromAlpha="0" android:toAlpha="1" />
</set>

收起:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale  android:interpolator="@android:anim/accelerate_interpolator" android:duration="200" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="100%" android:pivotY="0" android:toXScale="0" android:toYScale="0" />
    <!--同时配置淡出功能-->
    <alpha  android:duration="200" android:fillAfter="true" android:fromAlpha="1" android:toAlpha="0" />
</set>

效果:
这里写图片描述

类似游戏按钮的按下放大再还原效果:

  public static void animScaleIn(View view){
        //缩放动画
        ScaleAnimation animation = new ScaleAnimation(1,1.2f,1,1.2f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        animation.setDuration(100);
        animation.setFillAfter(true);
        animation.setRepeatMode(Animation.REVERSE);
        animation.setRepeatCount(1);

        //透明度动画
        AlphaAnimation animation1 = new AlphaAnimation(1,0.8f);
        animation1.setDuration(100);
        animation1.setRepeatCount(1);
        animation1.setRepeatMode(Animation.REVERSE);
        animation1.setFillAfter(true);

        //装入AnimationSet中
        AnimationSet set = new AnimationSet(true);
        set.addAnimation(animation);
        set.addAnimation(animation1);

        if (view != null)
        view.startAnimation(set);

    }

效果如下:

这里写图片描述

备注:由于我的图片是导出视频再用PS转换成的gif,故效率上有所损失,实际动画效果和速度比图片的快。

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

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

(0)
上一篇 2022年10月15日 下午1:00
下一篇 2022年10月15日 下午1:16


相关推荐

  • python pyquery_python3解析库pyquery

    python pyquery_python3解析库pyquerypyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便1、pyquery安装pip方式安装:$pipinstallpyquery#它依赖cssselect和lxml包pyquery==1.4.0-…

    2022年6月4日
    34
  • pythonif语句格式_python中if语句的用法

    pythonif语句格式_python中if语句的用法if判断语句if判断语句的基本语法if要判断的条件:条件成立时,要做的事情注意:代码的缩进为一个tab键,或者四个空格(pycharm自动帮我们增加)在python开发中,Tab和空格不要混用判断语句演练一需求:1.定义一个整数变量2.判断是否满18岁(&gt;=)3.如果满18岁,允许进入网吧总结:…

    2026年4月13日
    4
  • latex中希腊字母_LaTeX符号

    latex中希腊字母_LaTeX符号Latex和Matlab绘图中希腊字母、特殊符号汇总表Latex和Matlab绘图中希腊字母、特殊符号汇总表Latex和Matlab绘图中希腊字母、特殊符号汇总表一、小写希腊字母、特殊符号二、大写希腊字母三、希腊字母斜体原创不易,路过的各位大佬请点个赞一、小写希腊字母、特殊符号二、大写希腊字母三、希腊字母斜体原创不易,路过的各位大佬请点个赞…

    2022年10月13日
    12
  • numba 让python速度提升百倍

    numba 让python速度提升百倍本文仅供学习交流使用 如侵立删 联系方式及 demo 下载见文末 python 由于它动态解释性语言的特性 跑起代码来相比 java c 要慢很多 尤其在做科学计算的时候 十亿百亿级别的运算 让 python 的这种劣势更加凸显 办法永远比困难多 numba 就是解决 python 慢的一大利器 可以让 python 的运行速度提升上百倍 什么是 numba numba 是一款可以将 python 函数编译为机器代码的 JIT 编译器 经过 numba 编译的 python 代码 仅限数组运算 其运行速度可以接近 C 或 FORTRAN 语言

    2026年3月19日
    2
  • 如何彻底卸载 OpenClaw:Windows 和 macOS 指南

    如何彻底卸载 OpenClaw:Windows 和 macOS 指南

    2026年3月13日
    2
  • python读写、创建文件、文件夹等等

    python读写、创建文件、文件夹等等python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。得到当前工作目录,即当前Python脚本工作的目录路径:os.getcwd()返回指定目录下的所有文件和目录名:os.listdir()函数用来删除一个文件:os.remove()删除多个目录:os.removedirs(r“c:\python”)检验给出的路径是否是一个文件:os.path…

    2022年5月7日
    80

发表回复

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

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