在 Android Studio 中,anim
和 animator
文件夹都用于存放动画相关的资源文件,但它们的用途和使用方式略有不同。
以下是每个文件夹下提供3个对应的案例:
anim
文件夹案例在 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:fromAlpha
和 android: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"
表示循环播放动画,
标签表示每一帧的图片和持续时间。
在代码中加载并播放动画,示例代码如下:
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()
方法播放动画。
在 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:fromXScale
和 android:toXScale
表示水平方向上的缩放比例的起始值和结束值,android:fromYScale
和 android:toYScale
表示垂直方向上的缩放比例的起始值和结束值,android:pivotX
和 android: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()
方法开始播放动画。
animator
文件夹案例在 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:valueFrom
和 android:valueTo
表示属性的起始值和结束值,android:pivotX
和 android:pivotY
表示旋转的中心点,android:duration
表示动画持续时间,android:repeatCount
和 android: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()
方法开始播放动画。
在 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>
其中,
标签表示要改变的属性名称、起始值、结束值和持续时间。
在代码中加载并播放动画,示例代码如下:
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()
方法开始播放动画。
在 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:valueFrom
和 android:valueTo
表示属性的起始值和结束值,android:valueType
表示属性值的类型,
标签表示使用路径插值器定义动画的路径。
在代码中加载并播放动画,示例代码如下:
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 文件夹则主要用于存放属性动画和多值动画的资源文件。在实际开发中,可以根据需要选择合适的动画类型和资源文件来实现所需的动画效果。