public void AbsoluteLayoutOnMeasure() { tlog.Debug(tag, $"AbsoluteLayoutOnMeasure START"); flagOnMeasureOverride = false; Assert.False(flagOnMeasureOverride, "flagOnMeasureOverride should be false initial"); LayoutItem layoutItem = new LinearLayout(); View view = new View() { ExcludeLayouting = false, Size = new Size(100, 150), Layout = new AbsoluteLayout() }; layoutItem.AttachToOwner(view); var testingTarget = new MyAbsoluteLayout(); Assert.IsNotNull(testingTarget, "null handle"); Assert.IsInstanceOf <AbsoluteLayout>(testingTarget, "Should be an instance of AbsoluteLayout type."); testingTarget.AttachToOwner(view); testingTarget.Add(layoutItem); MeasureSpecification measureWidth = new MeasureSpecification(new LayoutLength(50.0f), MeasureSpecification.ModeType.AtMost); MeasureSpecification measureHeight = new MeasureSpecification(new LayoutLength(50.0f), MeasureSpecification.ModeType.AtMost); testingTarget.OnMeasureTest(measureWidth, measureHeight); Assert.True(flagOnMeasureOverride, "AbsoluteLayout overridden method not invoked."); testingTarget.Dispose(); tlog.Debug(tag, $"AbsoluteLayoutOnMeasure END (OK)"); }
private void InitializeViews() { { SVmain = new MyScrollView(Xamarin.Forms.ScrollOrientation.Vertical); { ALmain = new MyAbsoluteLayout { HorizontalOptions = Xamarin.Forms.LayoutOptions.FillAndExpand, VerticalOptions = Xamarin.Forms.LayoutOptions.Start, HeightRequest = treap.itemHeight, BackgroundColor = Xamarin.Forms.Color.LightYellow }; { LBend = new MyLabel("End of Results") { IsEnabled = false }; var layoutMethod = BarsLayoutMethod(0); ALmain.Children.Add(LBend, layoutMethod.Item1, layoutMethod.Item2); } SVmain.Content = ALmain; } this.Content = SVmain; } }
public void AbsoluteLayoutOnLayout() { tlog.Debug(tag, $"AbsoluteLayoutOnLayout START"); flagOnLayoutOverride = false; Assert.False(flagOnLayoutOverride, "flagOnLayoutOverride should be false initial"); LayoutItem layoutItem = new LinearLayout(); View view = new View() { ExcludeLayouting = false, Size = new Size(100, 150), Layout = new AbsoluteLayout() }; layoutItem.AttachToOwner(view); var testingTarget = new MyAbsoluteLayout(); Assert.IsNotNull(testingTarget, "null handle"); Assert.IsInstanceOf <AbsoluteLayout>(testingTarget, "Should be an instance of AbsoluteLayout type."); testingTarget.AttachToOwner(view); testingTarget.Add(layoutItem); testingTarget.OnLayoutTest(true, new LayoutLength(5), new LayoutLength(5), new LayoutLength(10), new LayoutLength(10)); Assert.True(flagOnLayoutOverride, "AbsoluteLayout overridden method not invoked."); // Test with false parameter flagOnLayoutOverride = false; Assert.False(flagOnLayoutOverride, "flagOnLayoutOverride should be false initial"); testingTarget.OnLayoutTest(false, new LayoutLength(5), new LayoutLength(5), new LayoutLength(10), new LayoutLength(10)); Assert.True(flagOnLayoutOverride, "AbsoluteLayout overridden method not invoked with false parameter."); testingTarget.Dispose(); tlog.Debug(tag, $"AbsoluteLayoutOnLayout END (OK)"); }
private bool UpdateLayout() { HashSet <DataType> remain = new HashSet <DataType>(); foreach (var p in ChildrenInUse) { remain.Add(p.Key); } bool answer = false; SVmain.BatchBegin(); treap.Query(treap.Count, new Action <Treap <DataType> .TreapNode>((o) => { MyAbsoluteLayout.SetLayoutBounds(LBend, BarsLayoutMethod(o.QueryYOffset()).Item1); ALmain.HeightRequest = o.QueryYOffset() + treap.itemHeight; })); if (treap.Count > 0) { double difference = 0; int l = UponIndex(), r = DownIndex(); for (int i = l; i <= r; i++) { treap.Query(i, new Action <Treap <DataType> .TreapNode>((o) => { var targetBound = BarsLayoutMethod(o.QueryYOffset()); GenericView view = null; if (ChildrenInUse.ContainsKey(o.data)) { view = ChildrenInUse[o.data]; remain.Remove(o.data); if (i == (l + r) / 2 && view.Bounds != null) { difference = targetBound.Item1.Y - view.Bounds.Y; } } else if (!answer) { answer = true; view = GetGenericView(); view.Reset(o.data); ChildrenInUse[o.data] = view; } if (view != null) { MyAbsoluteLayout.SetLayoutBounds(view, targetBound.Item1); } })); } if (difference != 0) { SVmain.MyScrollY += difference; //SVmain.ScrollToAsync(SVmain.ScrollX, SVmain.ScrollY + difference /** 1.05*/, false); } } foreach (var d in remain) { var v = ChildrenInUse[d]; ChildrenInUse.Remove(d); v.Reset(null); v.IsVisible = false; AvaiableChildrenPool.Push(v); } SVmain.BatchCommit(); return(answer); }