예제 #1
0
        public static ICharSequence Parse(
                Context context,
                List<IconFontDescriptorWrapper> iconFontDescriptors,
                string text,
                 TextView target)
        {
            context = context.ApplicationContext;

            // Analyse the text and replace {} blocks with the appropriate character
            // Retain all transformations in the accumulator
            SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(text);
            RecursivePrepareSpannableIndexes(context,
                text, spannableBuilder,
                iconFontDescriptors, 0);
            bool isAnimated = HasAnimatedSpans(spannableBuilder);

            if (isAnimated)
            {
                if (target == null)
                    throw new IllegalArgumentException("You can't use \"spin\" without providing the target TextView.");
                if (!(target is IHasOnViewAttachListener))
                    throw new IllegalArgumentException(target.GetType().Name + " does not implement " +
                            "HasOnViewAttachListener. Please use IconTextView, IconButton or IconToggleButton.");

                bool isAttached = false;
                var listener = new OnViewAttachListener();
                listener.Attach += (s, e) =>
                {
                    isAttached = true;

                    Runnable runnable = null;
                    runnable = new Runnable(() =>
                    {
                        if (isAttached)
                        {
                            target.Invalidate();
                            ViewCompat.PostOnAnimation(target, runnable);
                        }
                    });

                    ViewCompat.PostOnAnimation(target, runnable);
                };

                listener.Detach += (s, e) => isAttached = false;

                ((IHasOnViewAttachListener)target).SetOnViewAttachListener(listener);
            }
            else
            {
                (target as IHasOnViewAttachListener)?.SetOnViewAttachListener(null);
            }

            return spannableBuilder;
        }