ScrollView自定义渲染器不再适用于Xamarin Forms 2.x.

时间:2016-05-25 13:16:04

标签: android xamarin xamarin.forms scrollview custom-renderer

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

0 个答案:

没有答案