using System;
using Android.Widget;
using Com.Scwang.Smartrefresh.Layout;
using Com.Scwang.Smartrefresh.Layout.Header;
using Com.Scwang.Smartrefresh.Layout.Listener;
using Com.Scwang.Smartrefresh.Layout.Api;
using Com.Scwang.Smartrefresh.Layout.Constant;
namespace Shared
{
//VerticalRefreshLayout 带下拉刷新
///
/// 位置布局
///
public class VerticalRefreshLayout : ViewGroup
{
public Action BeginHeaderRefreshingAction;
private ScrollView mAndroidRefreshScrolView;
private SmartRefreshLayout mSmartRefreshLayout;
///
/// 构造函数
///
public VerticalRefreshLayout()
{
mSmartRefreshLayout = new SmartRefreshLayout(Application.Activity);
ClassicsHeader mClassicsHeader = new ClassicsHeader(Application.Activity);
//隐藏最后刷新时间文字
mClassicsHeader.SetEnableLastTime(false);
mSmartRefreshLayout.SetRefreshHeader(mClassicsHeader);
mOnRefreshListener = new OnRefreshListener(this);
mSmartRefreshLayout.SetOnRefreshListener(mOnRefreshListener);
viewGroup = mSmartRefreshLayout;
mAndroidRefreshScrolView = new ScrollView(Application.Activity, null);
viewGroup.AddView(mAndroidRefreshScrolView);
realViewGroup = new AndroidLinearLayout(Application.Activity, this);
(realViewGroup as AndroidLinearLayout).Orientation = Orientation.Vertical;
mAndroidRefreshScrolView.AddView(realViewGroup);
_isCanHeaderRefresh = true;
}
OnRefreshListener mOnRefreshListener;
public class OnRefreshListener : Java.Lang.Object, IOnRefreshListener
{
VerticalRefreshLayout _VerticalRefreshLayout;
public OnRefreshListener(VerticalRefreshLayout view)
{
_VerticalRefreshLayout = view;
}
public void OnRefresh(IRefreshLayout p0)
{
_VerticalRefreshLayout.BeginHeaderRefreshingAction?.Invoke();
}
}
///
/// 视图宽度
///
/// The width.
public override int Width
{
get
{
return base.Width;
}
set
{
base.Width = value;
if (!IsCanRefresh)
{
return;
}
var layoutParameters = realViewGroup.LayoutParameters;
layoutParameters.Width = Width;
realViewGroup.LayoutParameters = layoutParameters;
}
}
///
/// 视图高度
///
/// The height.
public override int Height
{
get
{
return base.Height;
}
set
{
base.Height = value;
if (!IsCanRefresh)
{
return;
}
var layoutParameters = realViewGroup.LayoutParameters;
layoutParameters.Height = Height;
realViewGroup.LayoutParameters = layoutParameters;
}
}
/////
///// 是否允许滑动
/////
///// true if scroll enabled; otherwise, false.
//public bool ScrollEnabled
//{
// get
// {
// return (mAndroidRefreshScrolView as AndroidScrolView).ScrollEnable;
// }
// set
// {
// (mAndroidRefreshScrolView as AndroidScrolView).ScrollEnable = value;
// }
//}
/////
///// 是否正在滑动
/////
///// true if decelerating; otherwise, false.
//public bool Decelerating
//{
// get
// {
// return false;
// }
//}
//***************************下拉刷新***************************
///
/// 是否支持下拉刷新
///
bool _isCanHeaderRefresh;
private bool IsCanHeaderRefresh
{
get
{
return _isCanHeaderRefresh;
}
set
{
_isCanHeaderRefresh = value;
}
}
///
/// 头开始刷新
///
public void BeginHeaderRefreshing()
{
if (!IsCanHeaderRefresh) return;
if (mSmartRefreshLayout.State != RefreshState.Refreshing)
{
mSmartRefreshLayout.AutoRefresh();
//Shared.HDLUtils.WriteLine("AutoRefresh");
}
}
///
/// 头结束刷新
///
public void EndHeaderRefreshing()
{
if (!IsCanHeaderRefresh) return;
if (mSmartRefreshLayout.State == RefreshState.Refreshing)
{
mSmartRefreshLayout.FinishRefresh();
//Shared.HDLUtils.WriteLine("FinishRefresh");
}
}
///
/// 是否显示滚动条
///
//bool _IsShowScrollBar;
public bool VerticalScrollBarEnabled
{
get
{
return mAndroidRefreshScrolView.VerticalScrollBarEnabled;
}
set
{
mAndroidRefreshScrolView.VerticalScrollBarEnabled = value;
}
}
////***************************上拉加载***************************
/////
///// 是否正在上拉加载
/////
//bool _isFooterRefreshing;
//public bool IsFooterRefreshing
//{
// get
// {
// return _isFooterRefreshing;
// }
// set
// {
// _isFooterRefreshing = value;
// }
//}
/////
///// 底部 开始上拉加载
/////
//public void beginFooterRefreshing()
//{
// if (!IsCanFooterRefresh) return;
// if (!IsFooterRefreshing)
// {
// mFooterLoadingView.Start(mHeaderRefreshText);
// IsFooterRefreshing = true;
// beginFooterRefreshingAction?.Invoke();
// }
//}
/////
///// 底部 结束上拉加载
/////
//public void endFooterRefreshing()
//{
// if (!IsCanFooterRefresh) return;
// if (IsFooterRefreshing)
// {
// mFooterLoadingView.Hide();
// IsFooterRefreshing = false;
// }
//}
}
/////
///// 竖直方向滑动控件
/////
//class AndroidRefreshScrolView : Android.Widget.ScrollView
//{
// ///
// /// 是否允许滑动
// ///
// public bool ScrollEnable = true;
// public Action AlreadyToTopAction;
// public Action AlreadyToTopUpAction;
// public Action AlreadyToBottomAction;
// View _view;
// ///
// /// 构造函数
// ///
// /// Context.
// /// View.
// public AndroidRefreshScrolView(Context context, View view)
// : base(context)
// {
// _view = view;
// VerticalScrollBarEnabled = true;
// //mScroller = new Scroller(context, new DecelerateInterpolator());
// }
// bool bAlreadyToTop;
// public override bool DispatchTouchEvent(MotionEvent e)
// {
// //Shared.HDLUtils.WriteLine($"{GetType()} Height->{Height} Width->{Width} DispatchTouchEvent->{e.Action}");
// if (e.Action == MotionEventActions.Down)
// {
// //还原允许拦截事件
// RequestDisallowInterceptTouchEvent(false);
// }
// return base.DispatchTouchEvent(e);
// }
// float mLastX, mLastY ;
// public override bool OnInterceptTouchEvent(MotionEvent ev)
// {
// //Shared.HDLUtils.WriteLine($"{GetType()} Height->{Height} Width->{Width} OnInterceptTouchEvent->{ev.Action}");
// if (!ScrollEnable || disallowIntercept)
// {
// return false;
// }
// switch (ev.Action)
// {
// case MotionEventActions.Down:
// mLastX = ev.RawX;
// mLastY = ev.RawY;
// bAlreadyToTop = false;
// Shared.HDLUtils.WriteLine($"MotionEventActions.Down");
// Parent?.RequestDisallowInterceptTouchEvent(true);
// break;
// case MotionEventActions.Up:
// Parent?.RequestDisallowInterceptTouchEvent(true);
// Shared.HDLUtils.WriteLine($"MotionEventActions.Up");
// if (bAlreadyToTop)
// {
// AlreadyToTopUpAction?.Invoke();
// Shared.HDLUtils.WriteLine($"AlreadyToTopUpAction");
// }
// break;
// case MotionEventActions.Move:
// var x = ev.RawX;
// var y = ev.RawY;
// var deltaX = x - mLastX;
// var deltaY = y - mLastY;
// Shared.HDLUtils.WriteLine($"MotionEventActions.Move");
// if (Math.Abs(deltaX) < Math.Abs(deltaY))
// {
// //向下滑动,如果当前已经滑动到顶,就允许父控件的拦截事件
// if (deltaY > 0 && ScrollY == 0)
// {
// bAlreadyToTop = true;
// AlreadyToTopAction?.Invoke();
// Parent?.RequestDisallowInterceptTouchEvent(false);
// return false;
// }
// //向上滑动时,如果translateY等于高度时,即表明滑动到底部,可又顶层View控制滑动
// var mChildH = 0;
// if (0 < ChildCount)
// {
// mChildH = GetChildAt(ChildCount - 1).Bottom;
// }
// var translateY = mChildH - ScrollY;
// if (deltaY < 0 && translateY == Height)
// {
// AlreadyToBottomAction?.Invoke();
// Parent?.RequestDisallowInterceptTouchEvent(false);
// return false;
// }
// }
// else
// {
// //左右滑动时,允许父控件的拦截
// if (4 < Math.Abs(deltaX))
// {
// Parent?.RequestDisallowInterceptTouchEvent(false);
// }
// }
// break;
// }
// return base.OnInterceptTouchEvent(ev);
// }
// ///
// /// 重写点击事件
// ///
// /// true, if touch event was oned, false otherwise.
// /// E.
// public override bool OnTouchEvent(MotionEvent e)
// {
// //Shared.HDLUtils.WriteLine($"{GetType()} Height->{Height} Width->{Width} OnInterceptTouchEvent->{e.Action}");
// _view?.TouchEvent(e);
// base.OnTouchEvent(e);
// //如果返回真父控件就不需要处理了
// return true;
// }
// bool disallowIntercept;
// public override void RequestDisallowInterceptTouchEvent(bool disallowIntercept)
// {
// this.disallowIntercept = disallowIntercept;
// //Shared.HDLUtils.WriteLine($"{GetType()} Height->{Height} RequestDisallowInterceptTouchEvent->{disallowIntercept}");
// base.RequestDisallowInterceptTouchEvent(disallowIntercept);
// Parent?.RequestDisallowInterceptTouchEvent(disallowIntercept);
// }
//}
}