如何给wpf中inkcanvas画板画笔画出的线加上动画

冰冰九公主 2013-05-23 10:15:56
wpf 中inkcanvas画板中ink模式下,画笔画出的线,怎么加上动画,最好是画完一笔后才开始动画,这个效果怎么实现呢?动画效果就是透明度有1变为0,高手指教一下吧。
...全文
229 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰冰九公主 2013-05-23
  • 打赏
  • 举报
回复
高手们,来人呀。
冰冰九公主 2013-05-23
  • 打赏
  • 举报
回复
冰冰九公主 2013-05-23
  • 打赏
  • 举报
回复
引用 3 楼 ariesget 的回复:
在StrokeCollected的事件中加个定时器修改Stroke的Color的Alpha值。

using System.Threading;

    private Dictionary<Stroke, Timer> dicTimer = new Dictionary<Stroke, Timer>();

    private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
        {
            Timer t1= new Timer(new TimerCallback(ChangeOpacity), e.Stroke, 100, 100);
            dicTimer.Add(e.Stroke, t1);
        }

        private void ChangeOpacity(Object obj)
        {
                Stroke line = obj as Stroke;
                Color linecolor = line.DrawingAttributes.Color;
                if (linecolor.ScA > 0)
                    linecolor.ScA -= 0.1f;
                this.Dispatcher.BeginInvoke(new Action(() => { line.DrawingAttributes.Color = linecolor; }));
                if (linecolor.A <= 0)
                {
                    dicTimer[line].Dispose();
                    dicTimer.Remove(line);
                }   
        }
多谢指点。帮了大忙了。嘿嘿
ariesget 2013-05-23
  • 打赏
  • 举报
回复
在StrokeCollected的事件中加个定时器修改Stroke的Color的Alpha值。

using System.Threading;

    private Dictionary<Stroke, Timer> dicTimer = new Dictionary<Stroke, Timer>();

    private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
        {
            Timer t1= new Timer(new TimerCallback(ChangeOpacity), e.Stroke, 100, 100);
            dicTimer.Add(e.Stroke, t1);
        }

        private void ChangeOpacity(Object obj)
        {
                Stroke line = obj as Stroke;
                Color linecolor = line.DrawingAttributes.Color;
                if (linecolor.ScA > 0)
                    linecolor.ScA -= 0.1f;
                this.Dispatcher.BeginInvoke(new Action(() => { line.DrawingAttributes.Color = linecolor; }));
                if (linecolor.A <= 0)
                {
                    dicTimer[line].Dispose();
                    dicTimer.Remove(line);
                }   
        }

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧