1

我有一个父视图(一个RelativeLayout),有一个子视图。我用 FillAfter = true 增加父视图的比例,然后我为子视图的 alpha 设置动画。在子视图的 alpha 动画期间,只有覆盖视图原始位置的视图部分被动画。对我来说,子视图动画的帧失效似乎没有考虑到父视图的缩放转换。我想知道如何实现这一点 - 能够动画/转换我的视图层次结构的任意层的能力。

RelativeLayout rootLayout = FindViewById<RelativeLayout>(Resource.Id.RootLayout);
rootLayout.SetClipChildren(false);

RelativeLayout parentLayout = new RelativeLayout(this);
parentLayout.SetClipChildren(false);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(500, 500);
layoutParams.LeftMargin = (this.Window.WindowManager.DefaultDisplay.Width - 500) / 2;
layoutParams.TopMargin = (this.Window.WindowManager.DefaultDisplay.Height - 500) / 2;
parentLayout.LayoutParameters = layoutParams;
parentLayout.SetBackgroundColor(new Color(255, 0, 0, 255));
rootLayout.AddView(parentLayout);

View childView = new View(this);
RelativeLayout.LayoutParams viewLayoutParams = new RelativeLayout.LayoutParams(200, 200);
viewLayoutParams.LeftMargin = 150;
viewLayoutParams.TopMargin = 150;
childView.LayoutParameters = viewLayoutParams;
childView.SetBackgroundColor(new Color(0, 255, 0, 255));
parentLayout.AddView(childView);

Button growButton = FindViewById<Button>(Resource.Id.growButton);
growButton.Click += delegate
    {
        ScaleAnimation scaleAnimation = new ScaleAnimation(1, 1.2f, 1, 1.2f, parentLayout.Width / 2, parentLayout.Height / 2);
        scaleAnimation.Duration = 1000;
        scaleAnimation.FillAfter = true;
        parentLayout.StartAnimation(scaleAnimation);
    };

Button fadeButton = FindViewById<Button>(Resource.Id.fadeButton);
fadeButton.Click += delegate
    {
        AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0.5f);
        alphaAnimation.Duration = 1000;
        alphaAnimation.FillAfter = true;
        childView.StartAnimation(alphaAnimation);
    };

这是单击增长按钮和淡入淡出按钮的结果图片:http://i.stack.imgur.com/Usm9c.png

这种情况是人为的——在我的项目中,父视图应用了多种类型的动画,并且当动画不运行时,它会覆盖 draw 方法以将这些转换应用于自身。这个父视图包含多个子视图,这些子视图本身以多种方式进行动画处理(包括通过 TransitionDrawable 的背景颜色动画)。

我认识到有一些迂回的方法可以解决这个问题——例如,将子项与父项分离,分别为它们设置动画,并将 AlphaAnimation 子类化以使用 ApplyTransformation 中的当前比例值更新子视图转换——但是当外推到更复杂的情况时,这变得很荒谬动画。而且我很确定我会通过 TransitionDrawable 碰到背景动画的另一面墙 - 与动画不同,我不知道什么时候我有机会改变它最终会失效的区域(最后的手段是后退覆盖 AnimationDrawable)。

必须有更好的方法来做到这一点,我觉得我必须在这里遗漏一些东西。我不认为这些类型的动画很复杂。它们在 WP 和 iOS 上是微不足道的。我该拒绝哪条路?我是否需要创建自己的动画线程并处理自己的失效?我应该使用 SurfaceViews 吗?

我的目标是 Gingerbread,所以我没有玩过 Property Animations - 但我很好奇他们是否会让这更容易?如果可以使开发变得更简单,那么切换目标可能是一种选择。

4

0 回答 0