在 Android 中使用 SpringAnimation 动画视图运动
在 Android 中,我们可以为对象的运动添加动画。我们可以为这些动作添加一些很酷的动画,而不是仅仅将对象的位置从一个点更新到另一个点。 Android 提供了很多方法可以让你通过动画改变视图对象在屏幕上的位置。但是,在这里我们将看看SpringAnimation 。 Spring Animation 是 Android Physics-Based 动画 API 的一部分。 Android Spring Animation 允许您像 Spring 一样为视图的移动设置动画。动画基于诸如潮湿、刚度、弹性等属性。一旦 SpringAnimation 启动,在每一帧弹簧力都会更新动画的值和速度。动画将继续运行,直到弹簧力达到平衡。
简单的 SpringAnimation
下面给出了一个示例视频,以了解我们将在本文中做什么。请注意,我们将使用Java语言来实现这个项目。
创建一个简单的弹簧动画真的很容易。以下是步骤:
- 添加支持库
- 创建SpringAnimation 的实例
- 设置运动行为参数
- 开始动画
创建一个弹簧动画
我们可以使用SpringAnimation类为对象创建弹簧动画。首先,我们要创建一个 SpringAnimation 类的实例,并提供一个对象(动画的目标对象)、一个我们想要动画的对象属性,以及动画的最终位置。
View object = findViewById(R.id.image);
final SpringAnimation animation = new SpringAnimation(object, DynamicAnimation. TRANSLATION_Y, 0f);
TRANSLATION_X、TRANSLATION_Y 和 TRANSLATION_Z
这些属性控制视图的位置,作为其左坐标、顶部坐标和高程的增量,由其布局容器设置。
- TRANSLATION_X – 左坐标
- TRANSLATION_Y – 顶部坐标
- TRANSLATION_Z – 相对于其高程的视图深度。
阻尼比:
它描述了弹簧振动的逐渐减小。系统中有四个阻尼比常数可用:
- DAMPING_RATIO_HIGH_BOUNCY
- DAMPING_RATIO_MEDIUM_BOUNCY
- DAMPING_RATIO_LOW_BOUNCY
- DAMPING_RATIO_NO_BOUNCY
刚性:
它描述了弹簧的强度。系统中有四个阻尼比常数可用:
- 硬度_高
- 硬度_中等
- STIFFNESS_LOW
- STIFFNESS_VERY_LOW
高阻尼和低刚度提供更多的振动/反弹。要将刚度和阻尼比添加到弹簧,请执行以下步骤
- 调用getString()方法检索弹簧以添加属性。
- 调用setDampingRatio() / setStiffness()方法并传递您要添加到弹簧的值。
要开始动画,我们调用start()或animateToFinalPosition(float Finalposition) 。此外,updateListener 和 removeListener 是各自的监听器,用于监听更新和删除不再需要的监听器。
animateToFinalPosition()方法执行两个任务:
- 设置弹簧的最终位置。
- 启动动画,如果它还没有开始。
最终位置必须在开始动画之前定义。
分步实施
让我们看一个将 SpringAnimation 添加到 ImageView 的简单示例。我们将使用Java编程语言来实现这个项目。
步骤 1:创建一个新项目
首先,我们要创建一个新项目。要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。
第 2 步:添加支持库
为了使用基于物理的支持库,我们希望将支持库添加到我们的项目中。
2.1。打开我们的 app 模块的build.gradle文件。
2.2.将支持库添加到依赖项
dependencies {
def dynamicanimation_version = '1.0.0'
implementation "androidx.dynamicanimation:dynamicanimation:$dynamicanimation_version"
}
第 3 步:将图像添加到可绘制文件夹
要将图像添加到可绘制文件夹,请参阅如何在 Android Studio 中将图像添加到可绘制文件夹。您只需将图像复制并粘贴到可绘制文件夹中即可将图像添加到可绘制文件夹
导航:app > res >drawable
.
第 4 步:使用 activity_main.xml 文件
导航到app > res > layout > activity_main.xml并将以下代码添加到该文件。下面是activity_main.xml文件的代码。
XML
Java
import androidx.appcompat.app.AppCompatActivity;
import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.SpringAnimation;
import androidx.dynamicanimation.animation.SpringForce;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Creating a view for the imageView
final View view =findViewById(R.id.imageView);
// Setting up a spring animation to animate the view
final SpringAnimation animation = new SpringAnimation(view, DynamicAnimation.TRANSLATION_Y,0f);
// Setting the damping ratio to create a high bouncing effect
animation.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_HIGH_BOUNCY);
// Setting the spring with a very low stiffness
animation.getSpring().setStiffness(SpringForce.STIFFNESS_VERY_LOW);
// Registering the AnimationEnd listener
// This will indicate the End of the animation
animation.addEndListener(new DynamicAnimation.OnAnimationEndListener() {
@Override
public void onAnimationEnd(DynamicAnimation animation1, boolean canceled, float value, float velocity) {
// set the image to the beginning of the Y axis
view.setY(50f);
// Again starting the animation
animation.animateToFinalPosition(500f);
}
});
// setting a OnClickListener to the view
// Starts the animation when the image is clicked
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// starts the animation
animation.animateToFinalPosition(500f);
}
});
}
}
第 5 步:使用MainActivity。Java
转到MainActivity。 Java文件并参考以下代码。下面是MainActivity 的代码。 Java文件。代码中添加了注释以更详细地理解代码。将动画添加到 ImageView 并在单击图像时启动动画。
Java
import androidx.appcompat.app.AppCompatActivity;
import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.SpringAnimation;
import androidx.dynamicanimation.animation.SpringForce;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Creating a view for the imageView
final View view =findViewById(R.id.imageView);
// Setting up a spring animation to animate the view
final SpringAnimation animation = new SpringAnimation(view, DynamicAnimation.TRANSLATION_Y,0f);
// Setting the damping ratio to create a high bouncing effect
animation.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_HIGH_BOUNCY);
// Setting the spring with a very low stiffness
animation.getSpring().setStiffness(SpringForce.STIFFNESS_VERY_LOW);
// Registering the AnimationEnd listener
// This will indicate the End of the animation
animation.addEndListener(new DynamicAnimation.OnAnimationEndListener() {
@Override
public void onAnimationEnd(DynamicAnimation animation1, boolean canceled, float value, float velocity) {
// set the image to the beginning of the Y axis
view.setY(50f);
// Again starting the animation
animation.animateToFinalPosition(500f);
}
});
// setting a OnClickListener to the view
// Starts the animation when the image is clicked
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// starts the animation
animation.animateToFinalPosition(500f);
}
});
}
}
输出:
这是我们项目的输出。