我有一个简单的面板用作绘图表面。这里的目标是在某些情况下在子ListView周围绘制一个4像素宽的轮廓。当一些东西被拖进去时,我想让轮廓脉动。
我只是在ListView周围绘制一个简单的矩形,并在计时器tick事件中更新矩形的不透明度。更改不透明度后,将重新绘制边框。此时我正在对这幅画进行双重缓冲。我也只允许每15个刻度左右重绘一次(定时器间隔为20毫秒)。毕竟,绘图过程仍然有点闪烁。这是不可接受的,所以我需要一些关于如何避免这种情况的指导。
我没有看到经常涂抹控件的方法。需要从不透明到固体再平滑过渡。当我将刻度间隔降低到足够低(大约300到500毫秒)时,闪烁停止,但刷新率太慢。
我对任何想法都持开放态度。也许我接近这个的方式是完全错误的,或者你们中的一个人已经创造了一个发光效果并知道该怎么做。感谢您提前提供任何帮助。
答案 0 :(得分:4)
SetStyle(ControlStyles.SupportsTransparentBackColor |
ControlStyles.Opaque |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
然后我首先在区域上绘制一个透明的颜色,然后我画边框。我有点像黑客,但它就像一个魅力。
编辑:还记得双重缓冲图像。
答案 1 :(得分:3)
在表单上设置DoubleBuffered = true。
答案 2 :(得分:1)
我没有强烈的答案,但由于你没有答案,我还是会发帖:
首先,我从未使用过System.Drawing.ImageAnimator类,但对你来说这可能是更好的方法吗?
其次,如果失败了,你是否尝试使用双缓冲而不是?这是一个很长的镜头,但也许你的双缓冲代码实际上使它变得更糟。
答案 3 :(得分:1)
我很抱歉,这可能无济于事:WPF有动画,至少在理论上可以顺利完成。
答案 4 :(得分:0)
远射,但你试过吗
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
在Panel Control上?
答案 5 :(得分:0)
您还可能希望查看位图上的绘图,然后只显示位图(如果已更改)。只是我的2c。