使用动画让图像扩展到视图中
Letting an image expand into view using an animation
在我的 Android 应用程序中,我有一个 TextView
的白色背景。当它被点击时,它的背景会通过调用 TextView
上的 setBackgroundResource(R.drawable.icon)
变成某个图标的 .png
图片。这按预期工作,但变化相当突然。我想让图标逐渐出现;单击 TextView
时,TextView
中央应会出现一个小图标,然后立即展开并填满整个 TextView
。我相信最好的方法是使用动画,Android 中的哪些可用动画类型最适合这项任务?
为了不明白我的意思,我画了个草图来说明。第二个序列显示代码现在是如何工作的,第一个序列显示我希望的样子。
如果解决了你的问题,试试这个方法。
- 在原始 ImageView (A) 上方创建一个 ImageView (X) - 与 (A) 大小和位置相同
- 使用
ObjectAnimator
为 (X) 设置动画,监听 onAnimationEnd
调用并设置 (A) 的背景。然后删除 (X).
希望这会有所帮助。
因此,我设法通过 ImageView
和 ScaleAnimation
获得了您想要的效果。这是你必须做的:
首先,我们的XMLImageView
:
<ImageView
android:id="@+id/scale_anim"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@android:color/white" />
它具有固定尺寸和白色背景。
在您的 onCreate()
方法中,单击一下动画就会开始:
ImageView starImageView = (ImageView) findViewById(R.id.scale_anim);
starImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ScaleAnimation starScaleAnimation =
new ScaleAnimation(0.3f, 1f, 0.3f, 1f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
starScaleAnimation.setDuration(500);
((ImageView) v).setImageResource(R.drawable.star);
ScaleAnimation scaleAnim = starScaleAnimation;
v.startAnimation(scaleAnim);
}
});
我们正在 ImageView
上应用缩放动画,该动画从其中心点开始以原始大小的 30% 缩放到其大小的 100%。这个动画的持续时间是半秒。所有这些参数都可以更改。
每次单击 ImageView
时,都会应用您的可绘制对象并开始播放动画。
在我的 Android 应用程序中,我有一个 TextView
的白色背景。当它被点击时,它的背景会通过调用 TextView
上的 setBackgroundResource(R.drawable.icon)
变成某个图标的 .png
图片。这按预期工作,但变化相当突然。我想让图标逐渐出现;单击 TextView
时,TextView
中央应会出现一个小图标,然后立即展开并填满整个 TextView
。我相信最好的方法是使用动画,Android 中的哪些可用动画类型最适合这项任务?
为了不明白我的意思,我画了个草图来说明。第二个序列显示代码现在是如何工作的,第一个序列显示我希望的样子。
如果解决了你的问题,试试这个方法。
- 在原始 ImageView (A) 上方创建一个 ImageView (X) - 与 (A) 大小和位置相同
- 使用
ObjectAnimator
为 (X) 设置动画,监听onAnimationEnd
调用并设置 (A) 的背景。然后删除 (X).
希望这会有所帮助。
因此,我设法通过 ImageView
和 ScaleAnimation
获得了您想要的效果。这是你必须做的:
首先,我们的XMLImageView
:
<ImageView
android:id="@+id/scale_anim"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@android:color/white" />
它具有固定尺寸和白色背景。
在您的 onCreate()
方法中,单击一下动画就会开始:
ImageView starImageView = (ImageView) findViewById(R.id.scale_anim);
starImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ScaleAnimation starScaleAnimation =
new ScaleAnimation(0.3f, 1f, 0.3f, 1f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
starScaleAnimation.setDuration(500);
((ImageView) v).setImageResource(R.drawable.star);
ScaleAnimation scaleAnim = starScaleAnimation;
v.startAnimation(scaleAnim);
}
});
我们正在 ImageView
上应用缩放动画,该动画从其中心点开始以原始大小的 30% 缩放到其大小的 100%。这个动画的持续时间是半秒。所有这些参数都可以更改。
每次单击 ImageView
时,都会应用您的可绘制对象并开始播放动画。