1

想给 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,但是这些事件什么都不做,将 Horizo​​ntalScrollBarEnabled 设置为 false,甚至将 .Enabled 设置为 false。就像我可以访问不同的对象?

找到了一个优秀的 git repo 使用相同的技术做同样的事情

https://github.com/chrisriesgo/xamarin-forms-carouselview/issues/24

它适用于它使用的 1.x 版本的表单,但将其升级到 2.x 并且由于上述原因它不再适用。

4

0 回答 0