标签: flicker

如何修复用户控件中的闪烁

在我的应用程序中,我不断从一个控件移动到另一个控件.我创造了没有.用户控件,但在导航过程中我的控件闪烁.更新需要1或2秒.我试着设置这个

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
or
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
SetStyle(ControlStyles.DoubleBuffer, true);
Run Code Online (Sandbox Code Playgroud)

但它没有帮助......每个控件都有相同的背景图像和不同的控件.那么它的解决方案是什么..
谢谢.

c# user-controls flicker winforms

105
推荐指数
4
解决办法
9万
查看次数

iPhone WebKit CSS动画导致闪烁

这是iphone网站:http: //www.thevisionairegroup.com/projects/accessorizer/site/

点击"立即播放"后,您将进入游戏.枪支将滚动进入.您可以上下滚动钱包和配件.你可以看到,当你放手时它们就会突然到位.就像快照发生一样,会发生闪烁.我正在使用的唯一webkit动画是:

'-webkit-transition': 'none'

'-webkit-transition': 'all 0.2s ease-out'

'-webkit-transform': 'translate(XXpx, XXpx)'
Run Code Online (Sandbox Code Playgroud)

我根据是否要让它进行动画选择第一个或第二个过渡,并且变换是我移动物体的唯一方式.

但最大的问题是当您点击"匹配项目",然后点击"再次播放".你会看到枪支的动画效果,配件/钱包的整个背景都会变白.有人可以请你透露一些洞察力,为什么会发生这种情况?

css iphone animation webkit flicker

81
推荐指数
6
解决办法
8万
查看次数

Android VideoView黑屏

在运行start()方法之前,我一直在寻找摆脱VideoView上令人讨厌的黑色初始屏幕的方法.

我已尝试在窗口小部件上使用背景图像,但它根本无法正常工作.我还尝试在视频顶部的视频中放置第一帧的图像,并将其隐藏在stars()方法之后.添加onPrepared侦听器以启动视频,然后隐藏图像.这有效,但过渡中有一个可怕的闪烁,我不知道如何摆脱它.


感谢您的回复.添加MediaController根本没有任何效果.问题仍然存在(我仍然看到黑色闪烁),我不想让视频控件可见.我的代码看起来像这样:

    VideoView vSurface= (VideoView) findViewById(R.id.surfaceView1);
    vSurface.setVideoURI(Uri.parse("android.resource://com.mypackage/" + R.raw.video1));
    vSurface.setVisibility(View.VISIBLE);
    vSurface.setOnPreparedListener(this);
    vSurface.setDrawingCacheEnabled(true);
    vSurface.setOnErrorListener(this);
Run Code Online (Sandbox Code Playgroud)

android flicker android-videoview

56
推荐指数
8
解决办法
6万
查看次数

c#在更新时闪烁列表视图

我有一个定期更新的列表视图(每60秒).对我来说很烦人,每当它过时都会闪烁.使用的方法是清除所有项目,然后重新创建它们.我决定不使用新文本清除直接写入单元格的项目.这是一种更好的方法,还是有人有更好的解决方案.

c# listview flicker

50
推荐指数
6
解决办法
5万
查看次数

如何在表单上双重缓冲.NET控件?

如何DoubleBuffered在遭受闪烁的表单上设置控件的受保护属性?

c# doublebuffered flicker winforms

48
推荐指数
8
解决办法
6万
查看次数

当与css变换结合使用时,固定附件背景图像在铬中闪烁/消失

我目前正在做一个视差网站主题.对于某些'div'和'section,需要将背景图像附加为固定的,以避免jquery沉迷于所有内容.问题是任何动画项目下方标签的背景图像在转换完成时消失,仅在Google Chrome上.补救?

background fixed flicker parallax background-attachment

42
推荐指数
5
解决办法
8万
查看次数

当用户调整对话框大小时,如何强制窗口不重绘对话框中的任何内容?

当用户抓住可调整大小的窗口的角落,然后移动它时,窗口首先移动窗口的内容,然后向正在调整大小的窗口发出WM_SIZE.

因此,在我想要控制各种子控件移动的对话框中,我想消除闪烁,用户首先看到Windows操作系统认为窗口看起来像什么(因为,AFAICT,操作系统使用bitblt方法移动在发送WM_SIZE之前窗口内部的东西) - 然后我的对话框才能处理移动其子控件或调整它们等等,之后它必须强制重新绘制内容,这会导致闪烁(在此处最小).

我的主要问题是:有没有办法强迫Windows不要做这个愚蠢的bitblt事情? 在窗口调整大小时移动控件的窗口或者调整其父级调整大小时,它肯定会出错.无论哪种方式,让操作系统进行预涂,只需拧紧工件即可.

我想了一段时间它可能与CS_HREDRAW和CSVREDRAW类标志有关.然而,现实是我不希望操作系统要求我擦除窗口 - 我只是想在没有操作系统的情况下重新绘制我自己的窗口内容(即我希望显示器是它的内容)在用户开始调整大小之前 - 没有来自操作系统的任何bitblit'.而且我不希望操作系统告诉每个控件它需要重绘(除非它恰好是一个实际上被调整后显示或显示的显示.

我真正想要的是:

  1. 在屏幕上更新任何内容之前移动和调整子控件的大小.
  2. 完全绘制所有已移动或已调整大小的子控件,以使它们在新的大小和位置上显示没有工件.
  3. 在子控件之间绘制空格而不影响子控件本身.

注意:步骤2和3可以颠倒过来.

当我将DeferSetWindowPos()与标记为WS_CLIPCHILDREN的对话框资源结合使用时,上述三件事似乎正确发生.

如果我可以将上述内容用于内存DC,那么我将获得额外的小好处,然后在WM_SIZE处理程序的末尾只执行一个bitblt.

我已经玩了一段时间了,我无法逃脱两件事:

  1. 我仍然无法抑制Windows做"预测bitblt". 答案:请参阅下面的解决方案,该解决方案将覆盖WM_NCCALCSIZE以禁用此行为.

  2. 我无法看到如何构建一个对话框,其子控件绘制到双缓冲区.答案:请参阅下面的约翰答案(标记为答案),了解如何让Windows操作系统对对话框进行双重缓冲(注意:根据文档,这不允许任何GetDC()中间的绘制操作).


我的最终解决方案(谢谢所有贡献的人,尤其是John K.):

经过大量的汗水和泪水,我发现以下技术在Aero和XP或Aero禁用时都能完美运行.轻弹不存在(1).

  1. 挂钩对话框proc.
  2. 覆盖WM_NCCALCSIZE以强制Windows验证整个客户端区域,而不是bitblt任何东西.
  3. 覆盖WM_SIZE以使用BeginDeferWindowPos/DeferWindowPos/EndDeferWindowPos为所有可见窗口执行所有移动和调整大小.
  4. 确保对话框窗口具有WS_CLIPCHILDREN样式.
  5. 不要使用CS_HREDRAW | CS_VREDRAW(对话框不要,因此通常不是问题).

布局代码取决于您 - 它很容易在CodeGuru或CodeProject上找到布局管理器的示例,或者自己动手.

以下是一些代码摘录,可以帮助您完成大部分工作:

LRESULT ResizeManager::WinProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch (msg)
    {
    case WM_ENTERSIZEMOVE:
        m_bResizeOrMove = true;
        break;

    case WM_NCCALCSIZE:
        // The WM_NCCALCSIZE idea was given to me by John Knoeller: 
        // see: http://stackoverflow.com/questions/2165759/how-do-i-force-windows-not-to-redraw-anything-in-my-dialog-when-the-user-is-resiz
        // 
        // The default …
Run Code Online (Sandbox Code Playgroud)

c++ winapi mfc resize flicker

32
推荐指数
1
解决办法
1万
查看次数

如何在没有闪烁的情况下调整Swing JWindow的大小?

我正在尝试基于a创建自定义UI JWindow,以便选择要共享的屏幕区域.我已经扩展JWindow并添加了代码以使其可调整大小并使用"切出"窗口的中心AWTUtilities.setWindowShape().

当运行代码时,我正在经历闪烁,因为窗口在负x和y方向上调整大小,即向上和向左.似乎正在发生的是在更新组件之前调整窗口大小并绘制窗口.下面是代码的简化版本.运行时,顶部面板可用于向上和向左调整窗口大小.窗口的背景设置为绿色,以清楚显示我不想显示的像素的位置.

编辑:改进代码以使用a正确地塑造窗口,ComponentListener并在底部添加虚拟组件以进一步说明闪烁(也更新了屏幕截图).

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Area;

import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;

import com.sun.awt.AWTUtilities;

public class FlickerWindow extends JWindow implements MouseListener, MouseMotionListener{

    JPanel controlPanel;
    JPanel outlinePanel;
    int mouseX, mouseY;
    Rectangle windowRect;
    Rectangle cutoutRect;
    Area windowArea;

    public static void main(String[] args) {
        FlickerWindow fw = new FlickerWindow();
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java swing resize flicker jwindow

24
推荐指数
1
解决办法
5478
查看次数

在Windows窗体应用程序中闪烁

我有一个应用程序,它有很多控件.并且它有大量的闪烁,特别是在启动时.

我将此修复程序应用于它.

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED
            return cp;
        }
    } 
Run Code Online (Sandbox Code Playgroud)

这很有效 - 闪烁的数量减少了令人难以置信的数量.但是,副作用是当我将鼠标移动或单击它们时,窗口右上角的最小化,最大化和关闭按钮不会生成动画(尽管它们仍在工作).这给了应用程序一种感觉.

如何在保留最大化,最小化和关闭按钮的可用性的同时保留WS_EX_COMPOSITED?

这种情况发生在Windows XP上.正如@fallenidol所指出的,这不是Windows 7上的问题.

c# flicker winforms createparams

22
推荐指数
2
解决办法
2万
查看次数

TLabel和TGroupbox Captions在调整大小时闪烁

  • 所以,我有一个应用程序加载不同的插件,并在TPageControl上为每个插件创建一个新选项卡.
  • 每个DLL都有一个与之关联的TForm.
  • 使用父hWnd创建表单作为新的TTabSheet.
  • 由于就VCL而言,TTabSheets不是表单的父级(不想使用动态RTL和其他语言的插件),我必须手动处理调整大小.我这样做如下:

    var
      ChildHandle : DWORD;
    begin
      If Assigned(pcMain.ActivePage) Then
        begin
        ChildHandle := FindWindowEx(pcMain.ActivePage.Handle, 0, 'TfrmPluginForm', nil);
        If ChildHandle > 0 Then
          begin
          SetWindowPos(ChildHandle, 0, 0, 0, pcMain.ActivePage.Width, pcMain.ActivePage.Height, SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOCOPYBITS);
        end;
      end;
    
    Run Code Online (Sandbox Code Playgroud)

现在,我的问题是当应用程序调整大小时,TGroupBox中的所有TGroupBox和TLabel都会闪烁.不在TGroupboxes内的TLabel很好,不会闪烁.

我试过的事情:

  • WM_SETREDRAW后跟一个RedrawWindow
  • TGroupBoxes和TLabels上的ParentBackground设置为False
  • DoubleBuffer:= True
  • LockWindowUpdate(是的,即使我知道这是非常错的)
  • 透明:= False(甚至覆盖create来编辑ControlState)

有任何想法吗?

delphi groupbox flicker tpagecontrol delphi-xe

21
推荐指数
2
解决办法
7247
查看次数