xamarin / Xamarin.Forms

Xamarin.Forms is no longer supported. Migrate your apps to .NET MAUI.
https://aka.ms/xamarin-upgrade
Other
5.62k stars 1.87k forks source link

[Bug] Flickering occurs when reusing the view in virtualization control in Xamarin.Form.UWP #6901

Open BalasubramaniSundaram opened 5 years ago

BalasubramaniSundaram commented 5 years ago

Description

Hi Team,

We at Syncfusion develop data virtualization controls for Xamarin and we have more than 90 controls spread across all platforms of Xamarin. Please refer the below link for a description about us. UserGuide: https://help.syncfusion.com/xamarin/sfdatagrid/overview FeatureTour: https://www.syncfusion.com/products/xamarin UserGuide:https://help.syncfusion.com/xamarin/sflistview/getting-started

Issue

We have custom "GridView" control. It's a virtualized control and hence we create the necessary views only once and only we reuse those views whenever scrolling takes place, except in one case where the type of the column that has gone out of view and column type that comes inside the view, we replace the out of view column is different. For instance, if a "TextColumn" is reused by a "PickerColumn", we remove the text column renderer child from the grid cell and replace it with the picker column renderer child. We use a queuing technique to achieve this. It is because of this adding and removing of children we can notice some slight flickering in the UI when scrolled very quickly.

We did try to overcome this delay by removing all performance extensive codes, removing queue data structures, removed all initializations and bindings for the children, loaded a simple label, stack, grid, BoxView, etc rather than our elements, etc. We also went one step further to try and tweak and rewrite our architecture to support asynchronous loading and reusing, adopting main thread and runnable implementations for reusing, etc. but was not able to get rid of this issue.

We have also tried the “BatchBegin()” and “BatchCommit()” method in our source. The method BatchBegin() & BatchCommit() executed in such a way before the columns have been reused while scrolling horizontally and BatchCommit() has been executed after the reusing of columns has been made but we could not see any improvement while scrolling.

Steps to Reproduce

  1. Run the attached sample
  2. Using a horizontal scroll bar, try to scroll faster as much.
  3. You can visually see the flickering in the UI view when reusing the view.

Expected Behavior

Resuing the view, flickering shouldn't occur.

Actual Behavior

Flickering occurring when resuing the view.

Basic Information

Video

Flickering.zip

Screenshots

image

Reproduction Link

DataGrid3_1.zip

jsuarezruiz commented 5 years ago

I have been testing the sample using Xamarin.Forms 4.x (4.1 and 4.2 pre). As you can see below, I do not notice these flickering problems as seen in the video, can you try the recent versions of Xamarin.Forms?

datagrid-flick

any other details to consider testing it?

BalasubramaniSundaram commented 5 years ago

Hi @jsuarezruiz

We have tested the sample with 4.1 as well in 4.2pre also the issue still persists. At initial loading, we scrolling with the horizontal bar or vertical bar we didn't get the flickering when alternately scroll with touch as well in scroll bars means still issue occurs. We suspect the issue didn't reproduce in your side due to the screen resolution and size maybe. Please check the issue corresponding settings.

Display settings. Scale: 125 % Resolution : 1920 * 1800

PureWeen commented 5 years ago

@BalasubramaniSundaram when running this via the simulator I'm able to see the same white flicker on the edges. Is there a way you could boil the sample down to using forms controls and not the SF ListView? This will let us isolate and resolve this issue. It's a little tricky to address this purely in the context of the Sf control

BalasubramaniSundaram commented 5 years ago

Hi @PureWeen ,

We have tried hard to replicate the issue in the simple sample, but couldn't able to replicate the issue. we're only loaded and unloaded the view from each grid cell when the column gets out of view when scrolling horizontally it's a basic architecture in our SfDataGrid. when loading and unloading its take some millisecond to update the view that why we are facing the issue, as well in android and ios we have also done wit this architecture only it's working fine, only in UWP we are facing this issue.

PureWeen commented 5 years ago

@BalasubramaniSundaram I'll move this one over to confirmed but it's going to be a hard one to prioritize if we don't have a reproduction we can work with.

KarthikRaja26 commented 4 years ago

Hi @PureWeen ,

Any update on this ?

KarthikRaja26 commented 4 years ago

Hi @PureWeen ,

I have prepared a sample to replicate the issue. Please provide the solution as soon as possible. sample link : https://www.syncfusion.com/downloads/support/directtrac/general/ze/Issue_sample-86114159.zip

Regards, Karthik Raja

KarthikRaja26 commented 4 years ago

Hi @PureWeen ,

still, now there is no update from you. So I am removing the sample. please let us know when you look on this and i will send you the sample.

Regards, Karthik Raja