想要向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并且由于上述原因它不再有效。