public StickyHeaderScrollView(Context context, View header, int minHeightHeader, HeaderAnimator headerAnimator, ScrollView scrollView)
     : base(context, header, scrollView, minHeightHeader, headerAnimator)
 {
     // scroll events
     scrollView.ViewTreeObserver.AddOnGlobalLayoutSingleFire(() => headerAnimator.OnScroll(-scrollView.ScrollY));
     scrollView.ViewTreeObserver.ScrollChanged += (sender, e) => headerAnimator.OnScroll(-scrollView.ScrollY);
 }
		public StickyHeaderRecyclerView(Context context, View header, int minHeightHeader, HeaderAnimator headerAnimator, RecyclerView recyclerView, bool preventTouchBehindHeader)
			: base(context, header, recyclerView, minHeightHeader, headerAnimator, preventTouchBehindHeader)
		{
			SetupItemDecorator();

			// scroll events
			recyclerView.AddOnScrollListener(new RecyclerScrollListener(this));
		}
        private StickyHeaderBuilder(Context context)
        {
            this.context = context;

            this.animator = null;
            this.header = null;
            this.minHeight = 0;
        }
        protected StickyHeaderView(Context context, View header, View view, int minHeightHeader, HeaderAnimator headerAnimator)
        {
            this.context = context;
            this.header = header;
            this.view = view;
            this.minHeightHeader = minHeightHeader;
            this.headerAnimator = headerAnimator;

            MeasureHeaderHeight();

            headerAnimator.SetupAnimator(header, minHeightHeader, heightHeader, maxHeaderTransaction);
        }
        public StickyHeaderListView(Context context, View header, int minHeightHeader, HeaderAnimator headerAnimator, ListView listView)
            : base(context, header, listView, minHeightHeader, headerAnimator)
        {
            // fake header
            var lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MatchParent, heightHeader);
            fakeHeader = new Space(context)
            {
                LayoutParameters = lp
            };
            this.listView.AddHeaderView(fakeHeader);

            // scroll events
            this.listView.Scroll += (sender, e) =>
            {
                var scrolledY = -CalculateScrollYList();
                headerAnimator.OnScroll(scrolledY);
            };
        }
		protected StickyHeaderView(Context context, View header, View view, int minHeightHeader, HeaderAnimator headerAnimator, bool preventTouchBehindHeader)
		{
			this.context = context;
			this.header = header;
			this.view = view;
			this.minHeightHeader = minHeightHeader;
			this.headerAnimator = headerAnimator;
			this.preventTouchBehindHeader = preventTouchBehindHeader;

			MeasureHeaderHeight();

			headerAnimator.SetupAnimator(header, minHeightHeader, heightHeader, maxHeaderTransaction);

			if (preventTouchBehindHeader)
			{
				header.Touch += OnHeaderTouch;
				header.LongClick += OnHeaderLongClick;
			}
		}
 public virtual StickyHeaderBuilder SetAnimator(Func<AnimatorBuilder> headerAnimator)
 {
     this.animator = new SimpleHeaderStickyAnimator(headerAnimator);
     return this;
 }
 public virtual StickyHeaderBuilder SetAnimator(HeaderAnimator headerAnimator)
 {
     this.animator = headerAnimator;
     return this;
 }