在 Android Studio 中,animanimator 文件夹都用于存放动画相关的资源文件,但它们的用途和使用方式略有不同。

以下是每个文件夹下提供3个对应的案例:

  1. anim 文件夹案例
  • 补间动画:创建一个渐变动画,改变 View 的透明度,用于实现淡入淡出等效果。

anim 文件夹中创建一个 XML 文件,例如 fade.xml,用于定义渐变动画的属性值和持续时间。示例代码如下:

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0.0"
    android:toAlpha="1.0"
    android:duration="1000" />

其中,android:fromAlphaandroid:toAlpha 表示透明度的起始值和结束值,android:duration 表示动画持续时间。

在代码中加载并播放动画,示例代码如下:

ImageView imageView = findViewById(R.id.image_view);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.fade);
imageView.startAnimation(anim);

其中,imageView 是一个 ImageView 控件,通过 AnimationUtils.loadAnimation() 方法加载动画资源文件,然后调用 startAnimation() 方法开始播放动画。

  • 逐帧动画:创建一个逐帧动画,将多张图片合成一张动画,用于实现一些简单的动态效果,例如图标的闪烁、动物的奔跑等。

anim 文件夹中创建一个 XML 文件,例如 frame.xml,用于定义逐帧动画的帧序列和持续时间。示例代码如下:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/frame1" android:duration="200" />
    <item android:drawable="@drawable/frame2" android:duration="200" />
    <item android:drawable="@drawable/frame3" android:duration="200" />
    <item android:drawable="@drawable/frame4" android:duration="200" />
</animation-list>

其中,android:oneshot="false" 表示循环播放动画,<item> 标签表示每一帧的图片和持续时间。

在代码中加载并播放动画,示例代码如下:

ImageView imageView = findViewById(R.id.image_view);
imageView.setBackgroundResource(R.anim.frame);
AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();
anim.start();

其中,imageView 是一个 ImageView 控件,通过 setBackgroundResource() 方法将动画资源文件设置为其背景,然后通过 getBackground() 方法获取背景,并转换为 AnimationDrawable 对象,最后调用 start() 方法播放动画。

  • 缩放动画:创建一个缩放动画,改变 View 的大小,用于实现放大缩小等效果。

anim 文件夹中创建一个 XML 文件,例如 scale.xml,用于定义缩放动画的属性值和持续时间。示例代码如下:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1.0"
    android:toXScale="1.5"
    android:fromYScale="1.0"
    android:toYScale="1.5"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1000" />

其中,android:fromXScaleandroid:toXScale 表示水平方向上的缩放比例的起始值和结束值,android:fromYScaleandroid:toYScale 表示垂直方向上的缩放比例的起始值和结束值,android:pivotXandroid:pivotY 表示缩放的中心点,android:duration 表示动画持续时间。

在代码中加载并播放动画,示例代码如下:

ImageView imageView = findViewById(R.id.image_view);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.scale);
imageView.startAnimation(anim);

其中,imageView 是一个 ImageView 控件,通过 AnimationUtils.loadAnimation() 方法加载动画资源文件,然后调用 startAnimation() 方法开始播放动画。

  1. animator 文件夹案例
  • 值动画:使用值动画改变 View 的属性值,例如透明度、旋转角度、平移距离等,实现更为复杂的动画效果,例如物体的移动、缩放、旋转等。

animator 文件夹中创建一个 XML 文件,例如 rotate.xml,用于定义旋转动画的属性值和持续时间。示例代码如下:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1000"
    android:repeatCount="infinite"
    android:repeatMode="restart" />

其中,android:propertyName 表示要改变的属性名称,android:valueFromandroid:valueTo 表示属性的起始值和结束值,android:pivotXandroid:pivotY 表示旋转的中心点,android:duration 表示动画持续时间,android:repeatCountandroid:repeatMode 表示动画循环播放的次数和模式。

在代码中加载并播放动画,示例代码如下:

ImageView imageView = findViewById(R.id.image_view);
ObjectAnimator anim = ObjectAnimator.ofFloat(imageView, "rotation", 0, 360);
anim.setDuration(1000);
anim.setRepeatCount(ValueAnimator.INFINITE);
anim.setRepeatMode(ValueAnimator.RESTART);
anim.start();

其中,imageView 是一个 ImageView 控件,通过 ObjectAnimator.ofFloat() 方法创建一个值动画对象,其中第一个参数表示要改变的对象,第二个参数表示要改变的属性名称,第三个参数表示属性的起始值和结束值,然后通过 setDuration()setRepeatCount()setRepeatMode() 方法设置动画的持续时间、循环播放的次数和模式,最后调用 start() 方法开始播放动画。

  • 多值动画:使用多值动画改变 View 的属性值,例如同时改变透明度和大小,实现更为复杂的动画效果,例如物体的闪烁、缩放等。

animator 文件夹中创建一个 XML 文件,例如 scale_alpha.xml,用于定义多值动画的属性值和持续时间。示例代码如下:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:propertyName="alpha"
        android:valueFrom="0.0"
        android:valueTo="1.0"
        android:duration="1000" />
    <objectAnimator
        android:propertyName="scaleX"
        android:valueFrom="1.0"
        android:valueTo="1.5"
        android:duration="1000" />
    <objectAnimator
        android:propertyName="scaleY"
        android:valueFrom="1.0"
        android:valueTo="1.5"
        android:duration="1000" />
</set>

其中,<objectAnimator> 标签表示要改变的属性名称、起始值、结束值和持续时间。

在代码中加载并播放动画,示例代码如下:

ImageView imageView = findViewById(R.id.image_view);
AnimatorSet anim = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.scale_alpha);
anim.setTarget(imageView);
anim.start();

其中,imageView 是一个 ImageView 控件,通过 AnimatorInflater.loadAnimator() 方法加载动画资源文件,然后设置动画的目标对象为 imageView,最后调用 start() 方法开始播放动画。

  • 自定义动画:使用自定义动画改变 View 的属性值,例如自定义路径动画,实现更为复杂的动画效果,例如物体的飞行等。

animator 文件夹中创建一个 XML 文件,例如 path.xml,用于定义自定义动画的属性值和持续时间。示例代码如下:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="x"
    android:valueFrom="0"
    android:valueTo="200"
    android:valueType="floatType">
    <pathInterpolator
        android:controlX1="0.4"
        android:controlY1="0.0"
        android:controlX2="1.0"
        android:controlY2="1.0" />
</objectAnimator>

其中,android:propertyName 表示要改变的属性名称,android:valueFromandroid:valueTo 表示属性的起始值和结束值,android:valueType 表示属性值的类型,<pathInterpolator> 标签表示使用路径插值器定义动画的路径。

在代码中加载并播放动画,示例代码如下:

ImageView imageView = findViewById(R.id.image_view);
ObjectAnimator anim = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.path);
anim.setTarget(imageView);
anim.start();

其中,imageView 是一个 ImageView 控件,通过 AnimatorInflater.loadAnimator() 方法加载动画资源文件,然后设置动画的目标对象为 imageView,最后调用 start() 方法开始播放动画。


总结

文件夹用途动画类型示例
anim存放逐帧动画和补间动画的资源文件逐帧动画、补间动画淡入淡出、逐帧动画、缩放动画
animator存放属性动画的资源文件属性动画、多值动画旋转动画、缩放和透明度动画

在 Android Studio 中,anim 和 animator 文件夹都用于存放动画相关的资源文件,但它们的用途和使用方式略有不同。在 anim 文件夹中存放的是逐帧动画和补间动画的资源文件,例如 AnimationDrawable 和 TweenAnimation 等,用于实现一些简单的动态效果。而在 animator 文件夹中存放的是属性动画的资源文件,例如 ValueAnimator 和 ObjectAnimator 等,用于实现更为复杂的动画效果。同时,animator 文件夹还可以用于存放多值动画的资源文件,用于同时改变多个属性值,例如同时改变透明度和大小。

综上所述,anim 文件夹主要用于存放逐帧动画和补间动画的资源文件,animator 文件夹则主要用于存放属性动画和多值动画的资源文件。在实际开发中,可以根据需要选择合适的动画类型和资源文件来实现所需的动画效果。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐