代码之家  ›  专栏  ›  技术社区  ›  senseiwa

设置内容页背景图像的动画

  •  0
  • senseiwa  · 技术社区  · 8 年前

    到目前为止,我还没有找到这个简单问题的答案:

    如何设置动画 BackgroundImage ?

    BackgroundImage = "1.jpg"; // <--- initial
    
    countdown = new System.Timers.Timer();
    
    countdown.Interval = 2000;
    countdown.Elapsed += (sender, e) => 
    {
        if (BackgroundImage == "1.jpg")
        {
            System.Diagnostics.Debug.WriteLine("change background to 2");
    
            Device.BeginInvokeOnMainThread(() =>
            {
                BackgroundImage = "marcus.jpg";
            });
    
        }
        else
        {
            System.Diagnostics.Debug.WriteLine("change background to 1");
    
            Device.BeginInvokeOnMainThread(() =>
            {
                BackgroundImage = "1.jpg";
            });
        }
    
    };
    countdown.Enabled = true;
    

    现在我想播放这个背景,而不是改变它,我非常想模仿苹果的照片与幻灯片:

    • 最初 背景是 1.jpg
    • 移动 一个方向的动画
    • 褪色 背景 2.jpg

    我不知道,但是,如何检索图像对象,以便我可以动画它。

    gif ,只是简单的静态图像。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Paul Kertscher    8 年前

    看一看 PageRenderer 源代码( see here for Android Image 就像你想象的那样

    void UpdateBackgroundImage(Page view)
    {
        if (!string.IsNullOrEmpty(view.BackgroundImage))
            this.SetBackground(Context.GetDrawable(view.BackgroundImage));
    }
    

    他们宁愿把它直接放在本机控件中。这意味着您必须模拟背景图像才能获得动画效果(这个词是否存在?)。

    Grid ( AbsoluteLayout

    • 这个 网格 各有一行和一列
    • 图像 应在任何其他子项之前(在集合中,不一定是临时的)添加包含背景的
    • 如果没有背景 图像
    • 如果已经有背景图像,则新图像将添加 Opacity 等于0
    • 一个用来淡化旧形象的
    • 使新图像淡入

    private void FadeViews(View newView, View currentView)
    {
        newView.Opacity = 0;
        Grid.Children.Insert(0, newView);
    
        newView.Animate("FadeIn", d => newView.Opacity = d, 0, 1);
        newView.Animate("FadeOut", d => currentView.Opacity = d, 1, 0, finished: (_, __) => this.Grid.Children.Remove(currentView));
    }
    

    因为我在用 TranslateTo 而不是 Animate