void SetIndicators()
        {
            if (Element.ShowIndicators)
            {
                SetPosition();

                indicators.SetViewPager(viewPager);

                // IndicatorsTintColor BP
                indicators.SetFillColor(Element.IndicatorsTintColor.ToAndroid());

                // CurrentPageIndicatorTintColor BP
                indicators.SetPageColor(Element.CurrentPageIndicatorTintColor.ToAndroid());

                // IndicatorsShape BP
                indicators.SetStyle(Element.IndicatorsShape);                 // Rounded or Squared

                var layoutParams = new global::Android.Widget.RelativeLayout.LayoutParams(global::Android.Widget.RelativeLayout.LayoutParams.MatchParent, global::Android.Widget.RelativeLayout.LayoutParams.WrapContent);
                layoutParams.AddRule(Element.IndicatorLocation == IndicatorLocation.Top ? global::Android.Widget.LayoutRules.AlignParentTop : global::Android.Widget.LayoutRules.AlignParentBottom);
                indicators.LayoutParameters = layoutParams;
            }
            else
            {
                indicators.RemoveAllViews();
            }

            // ShowIndicators BP
            indicators.Visibility = Element.ShowIndicators? AViews.ViewStates.Visible : AViews.ViewStates.Gone;
        }
Exemplo n.º 2
0
        void SetIndicators()
        {
            if (Element.ShowIndicators)
            {
                SetPosition();

                indicators.SetViewPager(viewPager);

                // IndicatorsTintColor BP
                indicators.SetFillColor(Element.IndicatorsTintColor.ToAndroid());

                // CurrentPageIndicatorTintColor BP
                indicators.SetPageColor(Element.CurrentPageIndicatorTintColor.ToAndroid());

                // IndicatorsShape BP
                indicators.SetStyle(Element.IndicatorsShape); // Rounded or Squared
            }
            else
            {
                indicators.RemoveAllViews();
            }

            // ShowIndicators BP
            indicators.Visibility = Element.ShowIndicators ? AViews.ViewStates.Visible : AViews.ViewStates.Gone;
        }
        void SetNativeView()
        {
            var inflater = AViews.LayoutInflater.From(Forms.Context);

            // Orientation BP
            if (Element.Orientation == CarouselViewOrientation.Horizontal)
            {
                nativeView = inflater.Inflate(Resource.Layout.horizontal_viewpager, null);
            }
            else
            {
                nativeView = inflater.Inflate(Resource.Layout.vertical_viewpager, null);
            }

            viewPager = nativeView.FindViewById <ViewPager>(Resource.Id.pager);

            viewPager.Adapter = new PageAdapter(Element);
            viewPager.SetCurrentItem(Element.Position, false);

            // InterPageSpacing BP
            var metrics          = Resources.DisplayMetrics;
            var interPageSpacing = Element.InterPageSpacing * metrics.Density;

            viewPager.PageMargin = (int)interPageSpacing;

            // InterPageSpacingColor BP
            viewPager.SetBackgroundColor(Element.InterPageSpacingColor.ToAndroid());

            // IsSwipingEnabled BP
            SetIsSwipingEnabled();

            // INDICATORS
            indicators = nativeView.FindViewById <CirclePageIndicator>(Resource.Id.indicator);

            SetPosition();

            indicators.SetViewPager(viewPager);

            // IndicatorsTintColor BP
            indicators.SetFillColor(Element.IndicatorsTintColor.ToAndroid());

            // CurrentPageIndicatorTintColor BP
            indicators.SetPageColor(Element.CurrentPageIndicatorTintColor.ToAndroid());

            // IndicatorsShape BP
            indicators.SetStyle(Element.IndicatorsShape);             // Rounded or Squared

            // ShowIndicators BP
            indicators.Visibility = Element.ShowIndicators ? AViews.ViewStates.Visible : AViews.ViewStates.Gone;

            viewPager.PageSelected           += ViewPager_PageSelected;
            viewPager.PageScrollStateChanged += ViewPager_PageScrollStateChanged;

            SetNativeControl(nativeView);
        }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (Element == null || viewPager == null)
            {
                return;
            }

            var rect = this.Element.Bounds;

            switch (e.PropertyName)
            {
            case "Orientation":
                orientationChanged = true;
                SetNativeView();
                Element.SendPositionSelected();
                Element.PositionSelectedCommand?.Execute(null);
                break;

            case "BackgroundColor":
                viewPager.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
                break;

            case "IsSwipeEnabled":
                SetIsSwipeEnabled();
                break;

            case "IndicatorsTintColor":
                indicators?.SetFillColor(Element.IndicatorsTintColor.ToAndroid());
                break;

            case "CurrentPageIndicatorTintColor":
                indicators?.SetPageColor(Element.CurrentPageIndicatorTintColor.ToAndroid());
                break;

            case "IndicatorsShape":
                indicators?.SetStyle((int)Element.IndicatorsShape);
                break;

            case "ShowIndicators":
                SetIndicators();
                break;

            case "ItemsSource":
                SetPosition();
                viewPager.Adapter = new PageAdapter(Element);
                viewPager.SetCurrentItem(Element.Position, false);
                SetArrowsVisibility();
                indicators?.SetViewPager(viewPager);
                Element.SendPositionSelected();
                Element.PositionSelectedCommand?.Execute(null);
                if (Element.ItemsSource != null && Element.ItemsSource is INotifyCollectionChanged)
                {
                    ((INotifyCollectionChanged)Element.ItemsSource).CollectionChanged += ItemsSource_CollectionChanged;
                }
                break;

            case "ItemTemplate":
                viewPager.Adapter = new PageAdapter(Element);
                viewPager.SetCurrentItem(Element.Position, false);
                indicators?.SetViewPager(viewPager);
                Element.SendPositionSelected();
                Element.PositionSelectedCommand?.Execute(null);
                break;

            case "Position":
                if (!isChangingPosition)
                {
                    SetCurrentPage(Element.Position);
                }
                break;

            case "ShowArrows":
                SetArrows();
                break;

            case "ArrowsBackgroundColor":
                if (prevBtn == null || nextBtn == null)
                {
                    return;
                }
                prevBtn.SetBackgroundColor(Element.ArrowsBackgroundColor.ToAndroid());
                nextBtn.SetBackgroundColor(Element.ArrowsBackgroundColor.ToAndroid());
                break;

            case "ArrowsTintColor":
                var prevArrow = nativeView.FindViewById <AWidget.ImageView>(Resource.Id.prevArrow);
                prevArrow.SetColorFilter(Element.ArrowsTintColor.ToAndroid());
                var nextArrow = nativeView.FindViewById <AWidget.ImageView>(Resource.Id.nextArrow);
                nextArrow.SetColorFilter(Element.ArrowsTintColor.ToAndroid());
                break;

            case "ArrowsTransparency":
                if (prevBtn == null || nextBtn == null)
                {
                    return;
                }
                prevBtn.Alpha = Element.ArrowsTransparency;
                nextBtn.Alpha = Element.ArrowsTransparency;
                break;
            }
        }
Exemplo n.º 5
0
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            var rect = this.Element.Bounds;

            switch (e.PropertyName)
            {
            case "Orientation":
                if (Element != null)
                {
                    orientationChanged = true;
                    SetNativeView();
                    Element.PositionSelected?.Invoke(Element, Element.Position);
                }
                break;

            case "InterPageSpacing":
                //var metrics = Resources.DisplayMetrics;
                //var interPageSpacing = Element.InterPageSpacing * metrics.Density;
                //viewPager.PageMargin = (int)interPageSpacing;
                break;

            case "BackgroundColor":
                viewPager?.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
                break;

            case "IsSwipingEnabled":
                SetIsSwipingEnabled();
                break;

            case "IndicatorsTintColor":
                indicators?.SetFillColor(Element.IndicatorsTintColor.ToAndroid());
                break;

            case "CurrentPageIndicatorTintColor":
                indicators?.SetPageColor(Element.CurrentPageIndicatorTintColor.ToAndroid());
                break;

            case "IndicatorsShape":
                indicators?.SetStyle(Element.IndicatorsShape);
                break;

            case "ShowIndicators":
                SetIndicators();
                break;

            case "ItemsSource":
                if (Element != null && viewPager != null)
                {
                    SetPosition();
                    viewPager.Adapter = new PageAdapter(Element);
                    viewPager.SetCurrentItem(Element.Position, false);
                    indicators?.SetViewPager(viewPager);
                    Element.PositionSelected?.Invoke(Element, Element.Position);
                    if (Element.ItemsSource != null && Element.ItemsSource is INotifyCollectionChanged)
                    {
                        ((INotifyCollectionChanged)Element.ItemsSource).CollectionChanged += ItemsSource_CollectionChanged;
                    }
                }
                break;

            case "ItemTemplate":
                if (Element != null && viewPager != null)
                {
                    viewPager.Adapter = new PageAdapter(Element);
                    viewPager.SetCurrentItem(Element.Position, false);
                    indicators?.SetViewPager(viewPager);
                    Element.PositionSelected?.Invoke(Element, Element.Position);
                }
                break;

            case "Position":
                if (Element != null && !isSwiping)
                {
                    SetCurrentPage(Element.Position);
                }
                break;
            }
        }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            var rect = this.Element.Bounds;

            switch (e.PropertyName)
            {
            case "Renderer":
                // Fix for NullReferenceException on Android tabbed page #59
                if (!Element.Height.Equals(-1))
                {
                    SetNativeView();
                    Element.PositionSelected?.Invoke(Element, EventArgs.Empty);
                }
                break;

            case "Width":
                //ElementWidth = rect.Width;
                break;

            case "Height":
                // To avoid calling ConfigureViewPager twice on launch;
                if (ElementHeight.Equals(0))
                {
                    ElementHeight = rect.Height;
                    SetNativeView();
                    Element.PositionSelected?.Invoke(Element, EventArgs.Empty);
                }
                break;

            case "Orientation":
                SetNativeView();
                Element.PositionSelected?.Invoke(Element, EventArgs.Empty);
                break;

            case "InterPageSpacing":
                //var metrics = Resources.DisplayMetrics;
                //var interPageSpacing = Element.InterPageSpacing * metrics.Density;
                //viewPager.PageMargin = (int)interPageSpacing;
                break;

            case "InterPageSpacingColor":
                viewPager?.SetBackgroundColor(Element.InterPageSpacingColor.ToAndroid());
                break;

            case "IsSwipingEnabled":
                SetIsSwipingEnabled();
                break;

            case "IndicatorsTintColor":
                indicators?.SetFillColor(Element.IndicatorsTintColor.ToAndroid());
                break;

            case "CurrentPageIndicatorTintColor":
                indicators?.SetPageColor(Element.CurrentPageIndicatorTintColor.ToAndroid());
                break;

            case "IndicatorsShape":
                indicators?.SetStyle(Element.IndicatorsShape);
                break;

            case "ShowIndicators":
                if (indicators != null)
                {
                    indicators.Visibility = Element.ShowIndicators ? AViews.ViewStates.Visible : AViews.ViewStates.Gone;
                }
                break;

            case "ItemsSource":
                if (viewPager != null)
                {
                    SetPosition();
                    viewPager.Adapter = new PageAdapter(Element);
                    viewPager.SetCurrentItem(Element.Position, false);
                    indicators?.SetViewPager(viewPager);
                    Element.PositionSelected?.Invoke(Element, EventArgs.Empty);
                    if (Element.ItemsSource != null && Element.ItemsSource is INotifyCollectionChanged)
                    {
                        ((INotifyCollectionChanged)Element.ItemsSource).CollectionChanged += ItemsSource_CollectionChanged;
                    }
                }
                break;

            case "ItemTemplate":
                if (viewPager != null)
                {
                    viewPager.Adapter = new PageAdapter(Element);
                    viewPager.SetCurrentItem(Element.Position, false);
                    indicators?.SetViewPager(viewPager);
                    Element.PositionSelected?.Invoke(Element, EventArgs.Empty);
                }
                break;

            case "Position":
                if (!isSwiping)
                {
                    SetCurrentPage(Element.Position);
                }
                break;
            }
        }
Exemplo n.º 7
0
        protected override void OnElementChanged(ElementChangedEventArgs <CarouselViewControl> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                // Instantiate the native control and assign it to the Control property with
                // the SetNativeControl method

                var inflater = AViews.LayoutInflater.From(Forms.Context);

                if (Element.Orientation == Orientation.Horizontal)
                {
                    nativeView = inflater.Inflate(Resource.Layout.viewpager, null);
                }
                else
                {
                    nativeView = inflater.Inflate(Resource.Layout.vertical_viewpager, null);
                }

                var metrics          = Resources.DisplayMetrics;
                var interPageSpacing = Element.InterPageSpacing * metrics.Density;

                viewPager            = nativeView.FindViewById <ViewPager>(Resource.Id.pager);
                viewPager.PageMargin = (int)interPageSpacing;

                viewPager.SetBackgroundColor(Element.InterPageSpacingColor.ToAndroid());

                indicator = nativeView.FindViewById <CirclePageIndicator>(Resource.Id.indicator);
                indicator.SetViewPager(viewPager);

                indicator.SetPageColor(Element.PageIndicatorTintColor.ToAndroid());
                indicator.SetFillColor(Element.CurrentPageIndicatorTintColor.ToAndroid());
                indicator.SetStyle(Element.IndicatorsShape);                 // Rounded or Squared

                indicator.Visibility = Element.ShowIndicators ? AViews.ViewStates.Visible : AViews.ViewStates.Gone;

                SetNativeControl(nativeView);
            }

            if (e.OldElement != null)
            {
                // Unsubscribe from event handlers and cleanup any resources

                if (viewPager != null)
                {
                    viewPager.PageSelected           -= ViewPager_PageSelected;
                    viewPager.PageScrollStateChanged -= ViewPager_PageScrollStateChanged;
                }

                if (Element != null)
                {
                    Element.RemoveAction     = null;
                    Element.InsertAction     = null;
                    Element.SetCurrentAction = null;
                }
            }

            if (e.NewElement != null)
            {
                // Configure the control and subscribe to event handlers

                viewPager.PageSelected           += ViewPager_PageSelected;
                viewPager.PageScrollStateChanged += ViewPager_PageScrollStateChanged;

                Element.RemoveAction     = new Action <int>(RemoveItem);
                Element.InsertAction     = new Action <object, int>(InsertItem);
                Element.SetCurrentAction = new Action <int>(SetCurrentItem);
            }
        }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            var rect = this.Element.Bounds;

            switch (e.PropertyName)
            {
            case "Orientation":
                if (Element != null)
                {
                    orientationChanged = true;
                    SetNativeView();
                    Element.SendPositionSelected();
                    Element.PositionSelectedCommand?.Execute(null);
                }
                break;

            case "InterPageSpacing":
                //var metrics = Resources.DisplayMetrics;
                //var interPageSpacing = Element.InterPageSpacing * metrics.Density;
                //viewPager.PageMargin = (int)interPageSpacing;
                break;

            case "BackgroundColor":
                viewPager?.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
                break;

            case "IsSwipingEnabled":
                SetIsSwipingEnabled();
                break;

            case "IndicatorsTintColor":
                indicators?.SetFillColor(Element.IndicatorsTintColor.ToAndroid());
                break;

            case "CurrentPageIndicatorTintColor":
                indicators?.SetPageColor(Element.CurrentPageIndicatorTintColor.ToAndroid());
                break;

            case "IndicatorsShape":
                indicators?.SetStyle(Element.IndicatorsShape);
                break;

            case "ShowIndicators":
                SetIndicators();
                break;

            case "ItemsSource":
                if (Element != null && viewPager != null)
                {
                    SetPosition();
                    viewPager.Adapter = new PageAdapter(Element);
                    viewPager.SetCurrentItem(Element.Position, false);
                    indicators?.SetViewPager(viewPager);
                    Element.SendPositionSelected();
                    Element.PositionSelectedCommand?.Execute(null);
                    if (Element.ItemsSource != null && Element.ItemsSource is INotifyCollectionChanged)
                    {
                        ((INotifyCollectionChanged)Element.ItemsSource).CollectionChanged += ItemsSource_CollectionChanged;
                    }
                }
                break;

            case "ItemTemplate":
                if (Element != null && viewPager != null)
                {
                    viewPager.Adapter = new PageAdapter(Element);
                    viewPager.SetCurrentItem(Element.Position, false);
                    indicators?.SetViewPager(viewPager);
                    Element.SendPositionSelected();
                    Element.PositionSelectedCommand?.Execute(null);
                }
                break;

            case "Position":
                if (Element != null && !isSwiping)
                {
                    if (prevBtn != null)
                    {
                        prevBtn.Visibility = Element.Position == 0 ? AViews.ViewStates.Gone : AViews.ViewStates.Visible;
                    }
                    if (nextBtn != null)
                    {
                        nextBtn.Visibility = Element.Position == Element.ItemsSource.GetCount() - 1 ? AViews.ViewStates.Gone : AViews.ViewStates.Visible;
                    }
                    SetCurrentPage(Element.Position);
                }
                break;

            case "ShowArrows":
                SetArrows();
                break;

            case "ArrowsBackgroundColor":
                if (prevBtn != null && nextBtn != null)
                {
                    prevBtn.SetBackgroundColor(Element.ArrowsBackgroundColor.ToAndroid());
                    nextBtn.SetBackgroundColor(Element.ArrowsBackgroundColor.ToAndroid());
                }
                break;

            case "ArrowsTintColor":
                if (prevBtn != null && nextBtn != null)
                {
                    var prevArrow = nativeView.FindViewById <AWidget.ImageView>(Resource.Id.prevArrow);
                    prevArrow.SetColorFilter(Element.ArrowsTintColor.ToAndroid());
                    var nextArrow = nativeView.FindViewById <AWidget.ImageView>(Resource.Id.nextArrow);
                    nextArrow.SetColorFilter(Element.ArrowsTintColor.ToAndroid());
                }
                break;
            }
        }