void InitializeMeasureCache() { _baseItemSize = 0; _scrollCanvasSize = new Size(0, 0); if (_allocatedSize.Width <= 0 || _allocatedSize.Height <= 0) { return; } if (!_hasUnevenRows) { CollectionView !.ContentSizeUpdated(); return; } int n = CollectionView !.Count; _itemSizes = new List <double>(); _cached = new List <bool>(); _accumulatedItemSizes = new List <double>(); for (int i = 0; i < n; i++) { _cached.Add(false); _itemSizes.Add(BaseItemSize); _accumulatedItemSizes.Add((i > 0 ? (_accumulatedItemSizes[i - 1] + ItemSpacing) : ItemStartPoint) + _itemSizes[i]); } CollectionView !.ContentSizeUpdated(); }
public void ItemRemoved(int removed) { if (_realizedItem.ContainsKey(removed)) { CollectionView !.UnrealizeView(_realizedItem[removed].View); _realizedItem.Remove(removed); } var items = _realizedItem.Keys.OrderBy(key => key); foreach (var index in items) { if (index > removed) { _realizedItem[index - 1] = _realizedItem[index]; } } var last = items.LastOrDefault(); if (last > removed) { _realizedItem.Remove(last); } UpdateRemovedSize(removed); _scrollCanvasSize = new Size(0, 0); CollectionView !.ContentSizeUpdated(); }
public void SetFooter(View?footer, Size size) { bool contentSizeChanged = false; if (IsHorizontal) { if (_footerSize.Width != size.Width) { contentSizeChanged = true; } } else { if (_footerSize.Height != size.Height) { contentSizeChanged = true; } } _footer = footer; _footerSize = size; if (contentSizeChanged) { InitializeMeasureCache(); CollectionView !.ContentSizeUpdated(); } UpdateFooterPosition(); }
public void ItemInserted(int inserted) { var items = _realizedItem.Keys.OrderByDescending(key => key); foreach (var index in items) { if (index >= inserted) { _realizedItem[index + 1] = _realizedItem[index]; } } if (_realizedItem.ContainsKey(inserted)) { _realizedItem.Remove(inserted); } else { var last = items.LastOrDefault(); if (last >= inserted) { _realizedItem.Remove(last); } } UpdateInsertedSize(inserted); _scrollCanvasSize = new Size(0, 0); CollectionView !.ContentSizeUpdated(); }
public void Reset() { foreach (var realizedItem in _realizedItem.Values.ToList()) { CollectionView !.UnrealizeView(realizedItem.View); } _realizedItem.Clear(); _scrollCanvasSize = new Size(0, 0); CollectionView !.ContentSizeUpdated(); }
public void SetHeader(View?header, Size size) { bool contentSizeChanged = false; if (IsHorizontal) { if (_headerSize.Width != size.Width) { contentSizeChanged = true; } } else { if (_headerSize.Height != size.Height) { contentSizeChanged = true; } } _header = header; _headerSize = size; if (contentSizeChanged) { InitializeMeasureCache(); CollectionView !.ContentSizeUpdated(); } if (_header != null) { var bound = new Rect(0, 0, _headerSize.Width, _headerSize.Height); if (IsHorizontal) { bound.Height = _allocatedSize.Height; } else { bound.Width = _allocatedSize.Width; } _header.UpdateBounds(bound); } }
public Size GetScrollCanvasSize() { if (CollectionView !.Count == 0 || _allocatedSize.Width <= 0 || _allocatedSize.Height <= 0) { return(_allocatedSize); } if (_scrollCanvasSize.Width > 0 && _scrollCanvasSize.Height > 0) { return(_scrollCanvasSize); } double totalItemSize = 0; if (_hasUnevenRows) { // If item source was shared between adaptors, in some case CollectionView.Count could be wrong if (_accumulatedItemSizes.Count == 0) { return(_allocatedSize); } totalItemSize = _accumulatedItemSizes[_accumulatedItemSizes.Count - 1] + FooterSizeWithSpacing; } else { totalItemSize = (BaseItemSize + ItemSpacing) * CollectionView !.Count - ItemSpacing + ItemStartPoint + FooterSizeWithSpacing; } if (IsHorizontal) { _scrollCanvasSize = new Size(totalItemSize, _allocatedSize.Height); } else { _scrollCanvasSize = new Size(_allocatedSize.Width, totalItemSize); } return(_scrollCanvasSize); }
public static void UpdateSize(this View view, Size size) { view.Size = size.ToNative(); }
public void SizeAllocated(Size size) { _allocatedSize = size; InitializeMeasureCache(); }
public static void UpdateSize(this EvasObject view, Size size) { view.Resize((int)size.Width, (int)size.Height); }
public static Size ToDP(this TSize size) { return(new Size(ConvertToScaledDP(size.Width), ConvertToScaledDP(size.Height))); }