gpt4 book ai didi

c# - Xamarin android C# ScrollView OnScrollChanged 事件

转载 作者:搜寻专家 更新时间:2023-11-01 07:56:04 24 4
gpt4 key购买 nike

在 Xamarin Android 中,我们如何扩展 ScrollView 以使用 protected OnScrollChanged 事件?

具体来说,我们如何扩展 ScrollView 以允许将 EventHandler 注册到 OnScrollChanged 事件?ScrollView 的其他哪些方法需要在扩展 ScrollView 的类中实现?

原因:

Android ScrollView 没有办法监听滚动事件。关于如何在 native Android Java 中扩展 ScrollView 存在各种问题,但是,没有解决如何将其应用于 Xamarin 的问答。

最佳答案

为了以这种方式扩展 ScrollView,我们应该实现 3 个构造函数

public UsefulScrollView(Context context)
public UsefulScrollView(Context context, IAttributeSet attrs)
public UsefulScrollView(Context context, IAttributeSet attrs, int defStyle)

我们还需要重写OnDraw方法

protected override void OnDraw(Android.Graphics.Canvas canvas)

要实现我们可以在用户滚动时响应的事件的功能,我们需要重写 OnScrollChanged 方法。

protected override void OnScrollChanged(int l, int t, int oldl, int oldt)

有多种方法允许事件监听和处理,但为了与 Xamarin 保持一致,我们可以向我们的类添加一个公共(public) EventHandler 属性。

public EventHandler<T> ScrollEventHandler { get; set; }

我们想要将值从 OnScrollChanged 传递到 EventHandler,所以让我们扩展 EventArgs

public class UsefulScrollEventArgs : EventArgs{
public int l { get; set; }
public int t { get; set; }
public int oldl { get; set; }
public int oldt { get; set; }
}

最后,不要忘记在每个构造函数中初始化我们的处理程序

ScrollEventHandler = (object sender, UsefulScrollEventArgs e) => {};

把它们放在一起,它可能看起来像这样

扩展的 EventArgs 类

public class UsefulScrollEventArgs : EventArgs{
public int l { get; set; }
public int t { get; set; }
public int oldl { get; set; }
public int oldt { get; set; }
}

扩展的 ScrollView 类

public class UsefulScrollView : ScrollView
{
public EventHandler<UsefulScrollEventArgs> ScrollEventHandler { get; set; }
public UsefulScrollView (Context context)
: base(context)
{
ScrollEventHandler = (object sender, UsefulScrollEventArgs e) => {};
}
public UsefulScrollView (Context context, IAttributeSet attrs)
: base(context, attrs) {
ScrollEventHandler = (object sender, UsefulScrollEventArgs e) => {};

}
public UsefulScrollView(Context context, IAttributeSet attrs, int defStyle)
: base(context, attrs, defStyle) {
ScrollEventHandler = (object sender, UsefulScrollEventArgs e) => {};

}
protected override void OnScrollChanged(int l, int t, int oldl, int oldt)
{
ScrollEventHandler (this,
new UsefulScrollEventArgs ()
{l=l,t=t,oldl=oldl,oldt=oldt});
base.OnScrollChanged (l, t, oldl, oldt);
}
protected override void OnDraw(Android.Graphics.Canvas canvas)
{

}
}

这个问答有助于解决这个问题:Scrollview listener is not working in Xamarin for Android?

关于c# - Xamarin android C# ScrollView OnScrollChanged 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27509507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com