使用动画让图像扩展到视图中

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).

希望这会有所帮助。

因此,我设法通过 ImageViewScaleAnimation 获得了您想要的效果。这是你必须做的:

首先,我们的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 时,都会应用您的可绘制对象并开始播放动画。