Skip to content

Commit 9361251

Browse files
XF: Placeholders don't always show or show with incorrect aspect ratio Fixes #353 #1239
1 parent 44aa9a0 commit 9361251

File tree

4 files changed

+31
-23
lines changed

4 files changed

+31
-23
lines changed

source/FFImageLoading.Forms.Droid/CachedImageFastRenderer.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class CachedImageFastRenderer : CachedImageView, IVisualElementRenderer
3232
private static readonly MethodInfo _viewExtensionsMethod = typeof(ImageRenderer).Assembly.GetType("Xamarin.Forms.Platform.Android.ViewExtensions")?.GetRuntimeMethod("EnsureId", new[] { typeof(Android.Views.View) });
3333
private static readonly MethodInfo _elementRendererTypeOnTouchEvent = ElementRendererType?.GetRuntimeMethod("OnTouchEvent", new[] { typeof(MotionEvent) });
3434
private bool _isDisposed;
35-
private int? _defaultLabelFor;
35+
private int? _defaultLabelFor;
3636
private VisualElementTracker _visualElementTracker;
3737
private IDisposable _visualElementRenderer;
3838
private IScheduledWork _currentTask;
@@ -110,7 +110,7 @@ private void OnElementChanged(ElementChangedEventArgs<CachedImage> e)
110110

111111
if (e.NewElement != null)
112112
{
113-
e.NewElement.InternalReloadImage = new Action(ReloadImage);
113+
e.NewElement.InternalReloadImage = new Action(ReloadImage);
114114
e.NewElement.InternalCancel = new Action(CancelIfNeeded);
115115
e.NewElement.InternalGetImageAsJPG = new Func<GetImageAsJpgArgs, Task<byte[]>>(GetImageAsJpgAsync);
116116
e.NewElement.InternalGetImageAsPNG = new Func<GetImageAsPngArgs, Task<byte[]>>(GetImageAsPngAsync);
@@ -316,16 +316,18 @@ private void UpdateBitmap(CachedImageView imageView, CachedImage image, CachedIm
316316

317317
private async void ImageLoadingSizeChanged(CachedImage element, bool isLoading)
318318
{
319-
if (element == null || _isDisposed || isLoading)
319+
if (element == null || _isDisposed)
320320
return;
321-
321+
322322
await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() =>
323323
{
324324
if (element == null || _isDisposed)
325325
return;
326326

327327
((IVisualElementController)element).NativeSizeChanged();
328-
element.SetIsLoading(isLoading);
328+
329+
if (!isLoading)
330+
element.SetIsLoading(isLoading);
329331
});
330332
}
331333

source/FFImageLoading.Forms.Droid/CachedImageRenderer.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private static void RegisterRenderer(Type type, Type renderer)
6868
}
6969

7070
private bool _isDisposed;
71-
private IScheduledWork _currentTask;
71+
private IScheduledWork _currentTask;
7272
private ImageSourceBinding _lastImageSource;
7373
private readonly MotionEventHelper _motionEventHelper = CachedImage.FixedAndroidMotionEventHandler ? new MotionEventHelper() : null;
7474
private readonly static Type _platformDefaultRendererType = typeof(ImageRenderer).Assembly.GetType("Xamarin.Forms.Platform.Android.Platform+DefaultRenderer");
@@ -131,7 +131,7 @@ protected override void OnElementChanged(ElementChangedEventArgs<CachedImage> e)
131131

132132
if (e.NewElement != null)
133133
{
134-
e.NewElement.InternalReloadImage = new Action(ReloadImage);
134+
e.NewElement.InternalReloadImage = new Action(ReloadImage);
135135
e.NewElement.InternalCancel = new Action(CancelIfNeeded);
136136
e.NewElement.InternalGetImageAsJPG = new Func<GetImageAsJpgArgs, Task<byte[]>>(GetImageAsJpgAsync);
137137
e.NewElement.InternalGetImageAsPNG = new Func<GetImageAsPngArgs, Task<byte[]>>(GetImageAsPngAsync);
@@ -234,9 +234,9 @@ private void UpdateBitmap(CachedImageView imageView, CachedImage image, CachedIm
234234
}
235235
}
236236

237-
private async void ImageLoadingSizeChanged(CachedImage element, bool isLoading)
238-
{
239-
if (element == null || _isDisposed || isLoading)
237+
private async void ImageLoadingSizeChanged(CachedImage element, bool isLoading)
238+
{
239+
if (element == null || _isDisposed)
240240
return;
241241

242242
await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() =>
@@ -245,11 +245,13 @@ await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() =>
245245
return;
246246

247247
((IVisualElementController)element).NativeSizeChanged();
248-
element.SetIsLoading(isLoading);
248+
249+
if (!isLoading)
250+
element.SetIsLoading(isLoading);
249251
});
250-
}
252+
}
251253

252-
private void ReloadImage()
254+
private void ReloadImage()
253255
{
254256
UpdateBitmap(Control, Element, null);
255257
}

source/FFImageLoading.Forms.Touch/CachedImageRenderer.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ internal class _CachedImageRenderer
4040
}
4141

4242
private bool _isDisposed;
43-
private IScheduledWork _currentTask;
43+
private IScheduledWork _currentTask;
4444
private ImageSourceBinding _lastImageSource;
4545
private readonly object _updateBitmapLock = new object();
4646

@@ -99,7 +99,7 @@ protected override void OnElementChanged(ElementChangedEventArgs<CachedImage> e)
9999

100100
if (e.NewElement != null)
101101
{
102-
e.NewElement.InternalReloadImage = new Action(ReloadImage);
102+
e.NewElement.InternalReloadImage = new Action(ReloadImage);
103103
e.NewElement.InternalCancel = new Action(CancelIfNeeded);
104104
e.NewElement.InternalGetImageAsJPG = new Func<GetImageAsJpgArgs, Task<byte[]>>(GetImageAsJpgAsync);
105105
e.NewElement.InternalGetImageAsPNG = new Func<GetImageAsPngArgs, Task<byte[]>>(GetImageAsPngAsync);
@@ -221,7 +221,7 @@ private void UpdateImage(PImageView imageView, CachedImage image, CachedImage pr
221221

222222
private async void ImageLoadingSizeChanged(CachedImage element, bool isLoading)
223223
{
224-
if (element == null || _isDisposed || isLoading)
224+
if (element == null || _isDisposed)
225225
return;
226226

227227
await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() =>
@@ -230,7 +230,9 @@ await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() =>
230230
return;
231231

232232
((IVisualElementController)element).NativeSizeChanged();
233-
element.SetIsLoading(isLoading);
233+
234+
if (!isLoading)
235+
element.SetIsLoading(isLoading);
234236
});
235237
}
236238

source/FFImageLoading.Forms.WinUWP/CachedImageRenderer.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -225,20 +225,22 @@ static Stretch GetStretch(Aspect aspect)
225225
}
226226
}
227227

228-
private async void ImageLoadingSizeChanged(CachedImage element, bool isLoading)
229-
{
230-
if (element == null || _isDisposed || isLoading)
228+
private async void ImageLoadingSizeChanged(CachedImage element, bool isLoading)
229+
{
230+
if (element == null || _isDisposed)
231231
return;
232-
232+
233233
await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() =>
234234
{
235235
if (element == null || _isDisposed)
236236
return;
237237

238238
((IVisualElementController)element).InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady);
239-
element.SetIsLoading(isLoading);
239+
240+
if (!isLoading)
241+
element.SetIsLoading(isLoading);
240242
});
241-
}
243+
}
242244

243245
void ReloadImage()
244246
{

0 commit comments

Comments
 (0)