安卓端Xamarin ListView常规滚动正常但fling飞滑方向倒置如何修复
Xamarin.Forms 飞滑方向反向问题修复方案
问题说明
- 该问题属于Xamarin.Forms已知BUG,具体表现为:滚动容器手动拖动滚动时方向正常,手指离开屏幕触发fling飞滑时,滑动方向与预期相反。
分步修复操作(Android平台)
1. 修复ScrollView飞滑异常
在你的Xamarin.Android项目中新建类CustomScrollViewRenderer.cs,粘贴以下代码,将代码中你的Android项目命名空间替换为你自己项目Android部分的实际命名空间:
using Android.Content; using Android.Views; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(ScrollView), typeof(你的Android项目命名空间.CustomScrollViewRenderer))] namespace 你的Android项目命名空间 { public class CustomScrollViewRenderer : ScrollViewRenderer { public CustomScrollViewRenderer(Context context) : base(context) { } public override bool Fling(int velocityY) { // 反转飞滑速度修正方向错误 return base.Fling(-velocityY); } } }
2. 修复CollectionView/ListView飞滑异常
如果是CollectionView、ListView等其他滚动控件出现该问题,对应创建自定义渲染器即可,以CollectionView为例,新建CustomCollectionViewRenderer.cs:
using Android.Content; using Android.Views; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(CollectionView), typeof(你的Android项目命名空间.CustomCollectionViewRenderer))] namespace 你的Android项目命名空间 { public class CustomCollectionViewRenderer : CollectionViewRenderer { public CustomCollectionViewRenderer(Context context) : base(context) { } public override bool Fling(int velocityY) { return base.Fling(-velocityY); } } }
3. 生效验证
修改完成后重新编译整个解决方案,部署到Android设备测试,飞滑方向即可恢复正常。
后续说明
- 该方案为临时适配方案,后续升级Xamarin.Forms到已修复该BUG的版本后,直接删除上述自定义渲染器即可。
内容的提问来源于stack exchange,提问作者david warford
相关产品推荐
相关产品推荐

