Android 使用动画将图像展开到视图中

Android 使用动画将图像展开到视图中,android,android-animation,Android,Android Animation,在我的Android应用程序中,我有一个白色背景的文本视图。单击它时,通过调用TextView上的setBackgroundResourceR.drawable.icon,其背景将更改为某个图标的.png图片。这是预期的,但变化相当突然。我想让图标逐渐出现;单击TextView时,图标的小版本应显示在TextView的中心,然后立即展开并填充整个TextView。我相信最好的方法是使用动画,安卓系统中可用的动画类型中哪一种最适合这个任务 如果不清楚我的意思,我画了一个草图来说明。第二个序列显示了

在我的Android应用程序中,我有一个白色背景的文本视图。单击它时,通过调用TextView上的setBackgroundResourceR.drawable.icon,其背景将更改为某个图标的.png图片。这是预期的,但变化相当突然。我想让图标逐渐出现;单击TextView时,图标的小版本应显示在TextView的中心,然后立即展开并填充整个TextView。我相信最好的方法是使用动画,安卓系统中可用的动画类型中哪一种最适合这个任务

如果不清楚我的意思,我画了一个草图来说明。第二个序列显示了代码现在是如何工作的,第一个序列显示了我希望它是如何工作的


如果这能解决你的问题,试试这个方法

在原始ImageView上方创建一个ImageView X,其大小和位置与原始ImageView相同 使用ObjectAnimator设置X动画,侦听onAnimationEnd调用并设置A的背景。然后移除X。
希望这会有所帮助。

因此,我使用ScaleAnimation通过ImageView获得了您想要的效果。以下是您必须做的:

首先,我们的XML ImageView:

我们正在ImageView上应用缩放动画,该动画以原始大小的30%显示恒星,并从其中心点缩放到其大小的100%。此动画的持续时间为半秒。所有这些参数都可以更改


每次单击ImageView时,都将应用可绘制视图并开始动画

你有所有这些中级可提取资源吗?@joao2fast4u我可以生成它们,但这听起来是一种无效的方法。我想象有可能用一个重复调整大小的图像来实现这一点。没有这种类型的动画存在吗?@joao2fast4u如果我的问题不清楚的话:我的意思不是像我的图表所示,这必然会发生在五个不同的阶段,而是作为一个持续的过程,发生得如此之快,以至于眼睛将其视为动画。为什么不使用ImageView来代替呢?因为使用setBackgroundResource,您无法控制资源的位置或维度。它将始终适合整个TextView背景。@joao2fast4u感谢您的建议,但我使用TextView是因为我需要它作为我应用程序的逻辑;视图有时必须显示文本。但这并不重要,因为我总是可以在相同的位置叠加一个ImageView,其宽度和高度与背景中的TextView相同。所以,如果你碰巧有一个解决方案可以用于ImageView,请告诉我,这对我来说都是一样的!谢谢你的回答!我喜欢这个想法,但我不明白ObjectAnimator到底做什么,因为我没有找到教程。它是否缩放/调整有问题的ImageView?如果是这样,我应该调用卸载方法吗?您可以使用ObjectAnimator制作很多动画。对于向后兼容,请使用nineodeldroids库。检查它以及如何使用at。是的,我刚刚意识到它不向后兼容,现在我试图实现它-它需要API级别11。我真的没有办法不使用NineodelDroids来做这件事吗?当我想要实现翻译动画时,它是如此简单,我惊讶于调整大小如此复杂。今天我有机会更仔细地研究这个问题,我有一些评论:我认为使用joao2fast4u建议的ScaleAnimation可能是向后兼容的一个很好的解决方案。至少它对我有用。此外,可能没有必要创建第二个ImageView来叠加在TextView上-我按照您的建议尝试了这一点,但我在让它看起来不错方面遇到了问题;由于setX和setY方法不向后兼容,因此很难设置视图的精确坐标。所以我决定让动画在TextView上运行非常感谢。我接受这个答案,因为这正是我所需要的。如果你知道的话,我想问你:我注意到我第一次点击视图时,图标在屏幕上不会很平滑地展开,但在随后的所有点击中,它会展开得非常平滑和漂亮。您知道我是否可以改进它,使它在第一次单击时也能以自然方式扩展吗?如果你不知道,不用担心,因为以后我会再问第二个问题。
<ImageView
        android:id="@+id/scale_anim"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:background="@android:color/white" />
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);
        }
    });