sliverlight:按点击移动的连续跑马灯

演示效果如下: 鼠标点击一次,所有方块向左移动一格

思路:
1.利用StoryBoard产生移动,每次点击时,该动画播放一次(即移动一格)
2.关键:动画播放完毕后,调用Stop方法,以回到初始位置,同时利用代码重新填充数据,造成"保留移动后位置"的视觉假象

Xaml代码:

Xaml
 1<UserControl.Resources>
 2        <Storyboard x:Name="sb_move" >
 3            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="b1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
 4                <EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-80"/>
 5            </DoubleAnimationUsingKeyFrames>
 6            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="b2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
 7                <EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-80"/>
 8            </DoubleAnimationUsingKeyFrames>
 9            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="b3" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
10                <EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-80"/>
11            </DoubleAnimationUsingKeyFrames>
12            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="b4" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
13                <EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-80"/>
14            </DoubleAnimationUsingKeyFrames>
15            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="b5" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
16                <EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-80"/>
17            </DoubleAnimationUsingKeyFrames>
18        </Storyboard>
19    </UserControl.Resources>
20
21    <Canvas Height="100" Width="310" Background="Gray" MouseLeftButtonDown="Canvas_MouseLeftButtonDown" x:Name="c" ToolTipService.ToolTip="点击我试试看" Cursor="Hand">
22        <Border Height="100" Name="b1" Width="70" Canvas.Left="0" Canvas.Top="0" RenderTransformOrigin="0.5,0.5">
23            <Border.RenderTransform>
24                <TransformGroup>
25                    <ScaleTransform/>
26                    <SkewTransform/>
27                    <RotateTransform/>
28                    <TranslateTransform/>
29                </TransformGroup>
30            </Border.RenderTransform>
31            <TextBlock x:Name="txt1" TextAlignment="Center" VerticalAlignment="Center" FontSize="36" FontFamily="Arial Black"/>
32        </Border>
33        <Border Height="100" Name="b2" Width="70" Canvas.Left="80" Canvas.Top="0" RenderTransformOrigin="0.5,0.5">
34            <Border.RenderTransform>
35                <TransformGroup>
36                    <ScaleTransform/>
37                    <SkewTransform/>
38                    <RotateTransform/>
39                    <TranslateTransform/>
40                </TransformGroup>
41            </Border.RenderTransform>
42            <TextBlock x:Name="txt2" TextAlignment="Center" VerticalAlignment="Center" FontSize="36" FontFamily="Arial Black"/>
43        </Border>
44        <Border Height="100" Name="b3" Width="70" Canvas.Left="160" Canvas.Top="0" RenderTransformOrigin="0.5,0.5">
45            <Border.RenderTransform>
46                <TransformGroup>
47                    <ScaleTransform/>
48                    <SkewTransform/>
49                    <RotateTransform/>
50                    <TranslateTransform/>
51                </TransformGroup>
52            </Border.RenderTransform>
53            <TextBlock x:Name="txt3" TextAlignment="Center" VerticalAlignment="Center" FontSize="36" FontFamily="Arial Black"/>
54        </Border>
55        <Border Height="100" Name="b4" Width="70"  Canvas.Left="240" Canvas.Top="0" RenderTransformOrigin="0.5,0.5">
56            <Border.RenderTransform>
57                <TransformGroup>
58                    <ScaleTransform/>
59                    <SkewTransform/>
60                    <RotateTransform/>
61                    <TranslateTransform/>
62                </TransformGroup>
63            </Border.RenderTransform>
64            <TextBlock x:Name="txt4" TextAlignment="Center" VerticalAlignment="Center" FontSize="36" FontFamily="Arial Black"/>
65        </Border>
66        <Border Height="100" Name="b5" Width="70" Canvas.Left="320" Canvas.Top="0" RenderTransformOrigin="0.5,0.5">
67            <Border.RenderTransform>
68                <TransformGroup>
69                    <ScaleTransform/>
70                    <SkewTransform/>
71                    <RotateTransform/>
72                    <TranslateTransform/>
73                </TransformGroup>
74            </Border.RenderTransform>
75            <TextBlock x:Name="txt5" TextAlignment="Center" VerticalAlignment="Center" FontSize="36" FontFamily="Arial Black"/>
76        </Border>
77        
78        <Canvas.Clip>
79        <RectangleGeometry Rect="0,0,310,100"></RectangleGeometry>
80    </Canvas.Clip>
81    
82    </Canvas>

Xaml.cs

Xaml.cs
 1using System;
 2using System.Collections.Generic;
 3using System.Windows.Controls;
 4using System.Windows.Media;
 5
 6namespace ClipTest
 7{
 8    public partial class Marquee : UserControl
 9    {
10
11        public List<MarqueeItem> listSrc;
12
13        int _currentIndex = 0;//初次加载时,从listSrc的第几项开始
14
15        public Marquee()
16        {           
17            InitializeComponent();
18            this.sb_move.Completed += new EventHandler(sb_move_Completed);
19            LoadData();
20            SetData();
21        }
22
23
24        /**//// <summary>
25        /// 加载源数据(需要调用外部数据的朋友,可自行修改本函数为远程加载xml之类)
26        /// </summary>
27        public void LoadData()
28        {
29            this.listSrc = new List<MarqueeItem>();
30            this.listSrc.Add(new MarqueeItem() { ItemColor = Color.FromArgb(0xFF, 0x9A, 0xCD, 0x32), ItemText = "1" });
31            this.listSrc.Add(new MarqueeItem() { ItemColor = Color.FromArgb(0xFF, 0xFF, 0xFF, 0x00), ItemText = "2" });
32            this.listSrc.Add(new MarqueeItem() { ItemColor = Color.FromArgb(0xFF, 0xF5, 0xF5, 0xF5), ItemText = "3" });
33            this.listSrc.Add(new MarqueeItem() { ItemColor = Color.FromArgb(0xFF, 0xF5, 0xF5, 0xDC), ItemText = "4" });
34            this.listSrc.Add(new MarqueeItem() { ItemColor = Color.FromArgb(0xFF, 0xFF, 0x20, 0xFF), ItemText = "5" });
35        }
36
37
38        public void SetData()
39        {
40            int _start = _currentIndex % listSrc.Count;
41
42            for (int i = 1; i <= 5; i++)
43            {
44                if (_start >= listSrc.Count) { _start = 0; }
45                (c.FindName("b" + i.ToString()) as Border).Background = new SolidColorBrush(listSrc[_start].ItemColor);
46                (c.FindName("txt" + i.ToString()) as TextBlock).Text = listSrc[_start].ItemText;
47                _start++;
48            }
49        }
50
51        void sb_move_Completed(object sender, EventArgs e)
52        {
53           
54            this.sb_move.Stop();
55            _currentIndex++;
56            SetData();
57            
58        }
59
60        private void Canvas_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
61        {
62            // TODO: Add event handler implementation here.
63            this.sb_move.Begin();
64        }
65    }
66
67
68    /**//// <summary>
69    /// 自定义Item类
70    /// </summary>
71    public class MarqueeItem
72    {
73        public Color ItemColor { set; get; }
74        public String ItemText { set; get; }
75    }
76
77}

时间: 2025-01-21 12:43:04

sliverlight:按点击移动的连续跑马灯的相关文章

AS应用:鼠标控制的跑马灯效果

控制|鼠标 做了个不太一样的跑马灯,你可以左右移动鼠标控制运动方向和速度.点击这里查看效果.代码如下: /***************import classes***************/ import mx.transitions.*; /*********declare variables and instances*******/ var nextX = 0; var num = 7; var speed = 2; /****************create objects**

Android实现跑马灯效果的方法_Android

本文实例讲述了Android实现跑马灯效果的方法.分享给大家供大家参考.具体如下: 运行效果截图如下: 直接在布局里写代码就好了: <TextView android:id="@+id/menu_desc" android:layout_width="300dip" android:layout_height="wrap_content" android:text="温馨提示:左右滑动更改菜单,点击进入" android

Android 纵向跑马灯滚动效果

像淘宝和京东都会有跑马灯的效果,今天给大家贡献下以前项目的一个demo,各位看官,且看效果图. 我们先定义一个Bean文件,这个实体类文件主要包含标题,内容描述,以及还有跳转的链接. LampBean  public class LampBean implements Serializable { public String title; public String info; } 接下来我们要去自定义一个LampView了,Lamp主要实现数据的接受,适配器填充数据,以及滚动实现,这里可以看出

自定义TextView实现跑马灯效果

mainActivity如下: package c.x; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button mStartbB

Android使用TextView跑马灯效果

老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可.而且,相关的资料其实网上也有一大堆了,之所以还写这篇博客出来是因为,网上好多人的博客都是只贴代码的啊,好一点的就是附带几张图片,可是这是动画效果啊,不动起来,谁知道跑马灯效果到底长什么样,到底是不是自己想要的效果啊(不会只有题主

一起谈.NET技术,Silverlight 游戏开发小技巧:传说中的透视跑马灯

昨夜元宵佳节,各种灯会热闹非凡,伴随烟火灿烂好不热闹,可惜一点也没看着T_T,那就写一个跑马灯吧,可是跑马灯并不稀奇,各位高手们已经写过而且都各有特点,所以,写也要写点有特色的才好,游戏中经常能看到一种带有透视的选人界面,上次写的是一个固定效果,那么这次带上点动画,结合一个Silverlight的MVC开发小技巧快速完成它. 仍然继续偷懒,借用之前的控件:Silverlight 游戏开发:简单的技能条系统 把Card控件拿出来,然后做一下简单的修改,然后打开XAML文件,填入如下的代码: 这是给

Silve“.NET研究”rlight 游戏开发小技巧:传说中的透视跑马灯

昨夜元宵佳节,各种灯会热闹非凡,伴随烟火灿烂好不热闹,可惜一点也没看着T_T,那就写一个跑马灯吧,可是跑马灯并不稀奇,各位高手们已经写过而且都各有特点,所以,写也要写点有特色的才好,游戏中经常能看到一种带有透视的选人界面,上次写的是一个固定效果,那么这次带上点动画,结合一个Silverlight的MVC开发小技巧快速完成它. 仍然继续偷懒,借用之前的控件:Silverlight 游戏开发:简单的技能条系统 上海徐汇企业网站设计与制作p> 把Card控件拿出来,然后做一下简单的修改,然后打开XAM

iOS - 跑马灯、弹幕

1.跑马灯 具体实现代码见 GitHub 源码 QExtension QMarqueeView.h #pragma mark - QMarqueeViewDelegate /// 跑马灯内容点击处理协议 @protocol QMarqueeViewDelegate <NSObject> - (void)didClickContentAtIndex:(NSInteger)index; @end #pragma mark - QMarqueeView /// 跑马灯滚动方向枚举 typedef N

Android实现跑马灯效果的方法

本文实例讲述了Android实现跑马灯效果的方法.分享给大家供大家参考.具体如下: 运行效果截图如下: 直接在布局里写代码就好了: <TextView android:id="@+id/menu_desc" android:layout_width="300dip" android:layout_height="wrap_content" android:text="温馨提示:左右滑动更改菜单,点击进入" android