想给 ScrollView 添加简单的分页。
在 iOS 上,添加这样的客户渲染器很容易:
[assembly:ExportRenderer (typeof(ScrollView), typeof(JustEat.Ordertracker.Touch.Renderers.ExtendedScrollViewRenderer))]
namespace JustEat.Ordertracker.Touch.Renderers
{
public class ExtendedScrollViewRenderer : ScrollViewRenderer
{
protected override void OnElementChanged (VisualElementChangedEventArgs e)
{
base.OnElementChanged (e);
UIScrollView iosScrollView = (UIScrollView)NativeView;
iosScrollView.PagingEnabled = true;
iosScrollView.ShowsHorizontalScrollIndicator = false;
}
}
}
所以看起来android没有分页标志,所以打算用触摸事件或类似的东西来实现,但不能在Android端触发任何事件。所以尝试了连接事件和覆盖:
[assembly:ExportRenderer (typeof(ScrollView), typeof(JustEat.Ordertracker.Touch.Renderers.ExtendedScrollViewRenderer))]
namespace JustEat.Ordertracker.Touch.Renderers
{
public class ExtendedScrollViewRenderer : ScrollViewRenderer
{
protected override void OnElementChanged (VisualElementChangedEventArgs e)
{
base.OnElementChanged (e);
global::Android.Widget.ScrollView droidScrollView = (global::Android.Widget.ScrollView)this;
droidScrollView.HorizontalScrollBarEnabled = false;
droidScrollView.Drag += delegate
{
Console.WriteLine("Drag");
};
}
public override bool OnTouchEvent(global::Android.Views.MotionEvent ev)
{
Console.WriteLine("OnTouchEvent");
return base.OnTouchEvent(ev);
}
}
}
当我遇到断点时,肯定会调用 OnElementChanged,但是这些事件什么都不做,将 HorizontalScrollBarEnabled 设置为 false,甚至将 .Enabled 设置为 false。就像我可以访问不同的对象?
找到了一个优秀的 git repo 使用相同的技术做同样的事情
https://github.com/chrisriesgo/xamarin-forms-carouselview/issues/24
它适用于它使用的 1.x 版本的表单,但将其升级到 2.x 并且由于上述原因它不再适用。