【Code-Snippet】Anim

news/2024/7/5 11:30:08

总的来说,Android动画可以分为两类,最初的传统动画和Android3.0 之后出现的属性动画; 传统动画又包括 帧动画(Frame Animation)和补间动画(Tweened Animation)。

1. View Animator

Animation类 是所有动画(scale、alpha、translate、rotate)的基类,这里以scale标签为例,讲解一下,Animation类所具有的属性及意义。

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。

分类

1.1 alpha 渐变透明度动画效果

  • android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
  • android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

Example:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="5000"
        android:fromAlpha="1.0" android:toAlpha="0.1"/>
</set>
复制代码
AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0.1f);
复制代码

1.2 scale 渐变尺寸伸缩动画效果

XML参数说明:

  • android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
  • android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
  • android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
  • android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View(如果当前为按键点击来切换页面,则这个View是button)的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
  • android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样。 关于pivotX和pivotY设置为'%p'的时候的原点为屏幕的左上角,向右为x正方向,向下为y正方向

Example:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="5000"
        android:fromXScale="1.0" android:fromYScale="1.0"
        android:pivotX="50%" android:pivotY="50%"
        android:toXScale="1.5" android:toYScale="1.5"/>
</set>
复制代码
ImageView img =  (ImageView) findViewById(R.id.img);
Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale_anim);
img.startAnimation(scaleAnimation);
复制代码

也可以直接用代码设置:

ScaleAnimation scaleAnim2 = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
复制代码

1.3 translate 画面转换位置移动动画效果

  • android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
  • android:toXDelta 结束点X轴坐标
  • android:toYDelta 结束点Y轴坐标

1.4 rotate 画面转移旋转动画效果

  • android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

1.5 Animation Set

AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0.1f);
ScaleAnimation scaleAnim2 = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
RotateAnimation rotateAnim = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 
    0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
xy.addAnimation(alphaAnim);
xy.addAnimation(rotateAnim);
xy.addAnimation(scaleAnim2);
xy.setDuration(3000);
btn_xml.startAnimation(xy);
复制代码

2. Property Animation

Property Animation 也可以用xml来定义,property的xml放在 res/animator 下。

2.1 xml设置

  • alpha
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:valueFrom="1.0"
    android:valueTo="0.0"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:propertyName="alpha"
    android:valueType="floatType"
     />
复制代码
  • sets
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="together">
    <objectAnimator
        android:duration="1000"
        android:valueFrom="1.0"
        android:valueTo="0.0"
        android:valueType="floatType"
        android:propertyName="alpha"
        android:repeatCount="1"
        android:repeatMode="reverse"/>
    <objectAnimator
        android:duration="1000"
        android:valueFrom="1.0"
        android:valueTo="3.0"
        android:valueType="floatType"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:propertyName="scaleX"/>
</set>
复制代码
  • Java代码中调用

载入 ObjectAnimator 动画 (1)通过AnimatorInflater.loadAnimator载入, (2)注意需要设置 setTarget (3)和代码一样的道理,属性值也可以在代码中动态修改 (4)新建的动画类的类别必须跟XML文件中的根标签对应

ObjectAnimator xxx = (ObjectAnimator) AnimatorInflater.loadAnimator(MainActivity.this,
        R.animator.test_object_animator);
xxx.setTarget(v);
xxx.start();
复制代码

2.2 java设置

  • 设置单一的 ObjectAnimator
ObjectAnimator anim = ObjectAnimator                //新建ObjectAnimator
        .ofFloat(v, "alpha", 1.0f, 0.0f,1.0f)        //设置变化的值从3.0f到0.0f
        .setDuration(1000);                          //设置变化时间
anim.setRepeatCount(1);                             //设置重复次数
anim.setRepeatMode(ObjectAnimator.REVERSE);         //设置重复模式
anim.setTarget(v);                                  //绑定控件,可以不用设置
btn_java.setPivotX(0);                              //设置变化的中心
btn_java.setPivotX(0);
anim.start();                                       //开启动画
复制代码
  • 设置单一的动画,ValueAnimator,必须要在addUpdateListener中更新控件的属性,不然没有任何效果
ValueAnimator animator = ValueAnimator
        .ofFloat(3.0f,0.0f)
        .setDuration(1000);
animator.setRepeatCount(1);
animator.setRepeatMode(ValueAnimator.RESTART);
animator.setTarget(v);
animator.start();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float x = (Float) animation.getAnimatedValue();
        v.setAlpha(x);                           //设置透明度
        v.setScaleX(x);                          //设置X轴
        v.setScaleY(x);                          //设置Y轴
    }
});
复制代码
  • 设置动画集,AnimatorSet
AnimatorSet set = new AnimatorSet();
set.setDuration(1000);
set.play(anim);
set.play(animator);
set.playTogether(anim, animator);    //设置两个动画一起运行
set.start();
复制代码

转载于:https://juejin.im/post/5c94a5ce5188252d8f631045


http://www.niftyadmin.cn/n/4072364.html

相关文章

PHP和jQuery实现截图自定义头像

在一些SNS网站上常会有一些自定义头像的功能&#xff0c;这里介绍一个用PHP和jQuery实现截图自定义头像的方法&#xff0c;需要的环境和前提如下&#xff1a; 1&#xff0c;PHP 需要 GD 2.0.1 或更高版本2&#xff0c;jQuery库3&#xff0c;jQuery图片处理插件imgareaselect …

使用即时文件初始化提高SQL Server性能

今天我想谈下SQL Server里的一个特别话题——即时文件初始化&#xff08;Instant File Initialization&#xff09;。对于你的SQL Server实例&#xff0c;如果你启用了即时文件初始化&#xff0c;在特定情况下&#xff0c;你会获得巨大的性能提升。即时文件初始化定义了当在数据…

python连接mysql数据表查询表获取数据导入到txt中

import pymysql连接mysql数据表查询表获取数据导入到txt中#查询结果写入数据到txtdef get_loan_number(file_txt): connect pymysql.Connect( host"100.100.100.0", port3306, user"test", passwd"123", …

python基础数据类型之 set 及数据类型补充、编码进阶、小数据池、深浅拷贝

1.集合(set) 集合就是一个没有值的字典,遵循:唯一,无序,元素要求可哈希(不可变) 集合是无序的 集合是可变的 集合的操作方法: 增:s.update("3456") # 迭代添加print(s)s.add("怼怼")print(s) 删:s {1,2,3,"123",False,(1,2,3,4)}print(s)s.pop…

15. Django连接Mysql数据库

安装PyMySQL&#xff0c;打开cmd&#xff0c; pip install PyMySQL在.../blog/init.py 目录下添加&#xff1a;import pymysql pymysql.install_as_MySQLdb() 3.打开settings.py文件&#xff0c;注释粗体部分代码&#xff0c;添加数据库配置代码&#xff0c;如下所示&#xff…

图片的内存缓存控制

为什么80%的码农都做不了架构师&#xff1f;>>> 从网上找到的&#xff0c;自己整理了下&#xff1a; public class MemoryCache{private static final String TAG "MemoryCache";/*** 放入缓存时是个同步操作* LinkedHashMap构造方法的最后一个参数true…

DES算法实例详解

为什么80%的码农都做不了架构师&#xff1f;>>> 译自J. Orlin Grabbe的名作《DES Algorithm Illustrated》&#xff0c;国外许多大学将该文章作为补充材料&#xff0c;可作为理解DES算法的最佳入门手册。反观许多教材介绍DES时直接照搬一张流程图&#xff0c;图中I…

手把手教你如何正确启动Android SDK 1.5模拟器

为什么80%的码农都做不了架构师&#xff1f;>>> 首先要确认下自己的电脑是否安装过JDK、没有的话可以 点我下载&#xff08;右键迅雷下载&#xff09; &#xff01;安装好JDK后&#xff0c;按住键盘上的 WINR 键&#xff0c;在弹出的运行框中输入cmd&#xff0c;回…