作者: 贱贱的贱贱
查看: 2790|回复: 6
打印 上一主题 下一主题

[源码] 【自定义Lable特效】YouTube搬运超赞自定义Lable控件特效

[复制链接]
跳转到指定楼层
楼主
查看: 2790|回复: 6
说明:
先上GIf图,帧数有点低,但是实际效果比这个好很多。

效果图:


源码展示:
[C#] 纯文本查看 复制代码
 class DecodeLabel:Label
    {
        private readonly Timer _timerAnimate = new Timer();
        private TextDecodeEffect _decodeEffect;
        private bool _showing;
        private int _initGenCount;

        public int Interval
        {
            get { return _timerAnimate.Interval; }
            set { _timerAnimate.Interval = value; }
        }

        public DecodeLabel()
        {
            _timerAnimate.Interval = 100;
            _timerAnimate.Tick += _timerAnimate_Tick;
        }

        public void Animate(bool show, string text, int initGenCount)
        {
            _initGenCount = initGenCount;
            _decodeEffect = new TextDecodeEffect(text) { TextVisible = !show };
            Text = _decodeEffect.Peek(DecodeMode.None);
            _showing = show;
            _timerAnimate.Start();
        }
        private void _timerAnimate_Tick(object sender, EventArgs e)
        {
            if (_initGenCount != 0)
            {
                Text = _decodeEffect.GenerateNumberRange(Text.Length);
                _initGenCount--;
                return;
            }

            var decodeMode = _showing ? DecodeMode.Show : DecodeMode.Hide;
            var text = _decodeEffect.Peek(decodeMode);

            if (text == null)
            {
                _timerAnimate.Stop();
            }
            else
            {
                Text = text;
            }
        }
    }

    public enum DecodeMode
    {
        None,
        Show,
        Numbers,
        Hide
    }

    class TextDecodeEffect
    {
        private int _visibleCount;
        private readonly Random _random = new Random();

        public bool TextVisible
        {
            get { return _visibleCount == OriginalText.Length;}
            set { _visibleCount = value ? OriginalText.Length : 0; }
        }
        public string OriginalText { get; private set; }

        public TextDecodeEffect(string text)
        {
            OriginalText = text;
        }

        public string Peek(DecodeMode mode)
        {
            switch (mode)
            {
                case DecodeMode.Numbers:
                    return GenerateNumberRange(OriginalText.Length);
                case DecodeMode.Hide:
                    if (_visibleCount == 0) return null;
                    _visibleCount--;
                    break;
                case DecodeMode.Show:
                    if (_visibleCount == OriginalText.Length) return null;
                    _visibleCount++;
                    break;
            }
            var text = GenerateNumberRange(OriginalText.Length - _visibleCount);
            text += OriginalText.Substring(OriginalText.Length - _visibleCount, _visibleCount);
            return text;
        }
        public string GenerateNumberRange(int count)
        {
            var SB = new StringBuilder();
            for (int i = 0; i < count; i++)
                SB.Append(_random.Next(0, 10));
            return SB.ToString();
        }
    }



案例源码下载:

评分

参与人数 2金钱 +3 收起 理由
Blue_Pen + 1 淡定
乔克斯 + 2 感谢分享,LZ辛苦了~

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 转播转播
回复 论坛版权

使用道具 举报

沙发
CastleDrv 发表于 2015-1-3 22:43:26 | 只看该作者
感谢分享
回复

使用道具 举报

板凳
蜗牛111 发表于 2018-9-4 10:05:09 | 只看该作者
感谢lz分析
地板
萧莫晨 发表于 2018-9-6 11:29:57 | 只看该作者
感谢分享
回复

使用道具 举报

5#
Leadzery 发表于 2018-10-15 23:39:38 | 只看该作者
谢谢楼主无私奉献,好人一生平安
6#
jacksonwong 发表于 2019-5-17 13:39:48 | 只看该作者
感谢分享!
回复

使用道具 举报

7#
abweixx 发表于 2022-7-8 09:07:45 | 只看该作者
很不错,有创意!
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-4-24 22:21, Processed in 0.592449 second(s), 34 queries , Gzip On.

快速回复 返回顶部 返回列表