任何人都知道如何在Xamarin.Forms.ScrollView控件的ScrollToAsync方法中更改滚动动画的速度?
我正在使用Xamarin Forms开发Android应用程序。 感谢
答案 0 :(得分:3)
不幸的是,在撰写本文时,ScrollToAsync速度已硬编码为1000毫秒(at least for Android)。
我可以自己制作动画来解决此问题:
Point point = scrollView.GetScrollPositionForElement(targetElement, ScrollToPosition.Start);
var animation = new Animation(
callback: y => scrollView.ScrollToAsync(point.X, y, animated: false),
start: scrollView.ScrollY,
end: point.Y - 6);
animation.Commit(
owner: this,
name: "Scroll",
length: 300,
easing: Easing.CubicIn);
还有here's the documentation是动画。
答案 1 :(得分:0)
为了模拟AsyncToScroll的速度提升,我使用了scrollview的FadeTo方法并设置了参数" animated" AsyncToScroll为false。 (我的例子是水平滚动视图)
await MyScrollView.FadeTo(1, 200, Easing.CubicIn);
await MyScrollView.ScrollToAsync(_newScrollX_value, 0, false);
答案 2 :(得分:0)
由Taylor Lafrinere's answer修改而成,以下是与水平滚动动画相同的代码段:
Point point = scrollView.GetScrollPositionForElement(screenContent, ScrollToPosition.Start);
// insert fix for iOS jumping here
var animation = new Animation(
callback: x => scrollView.ScrollToAsync(x, point.Y, animated: false),
start: scrollView.ScrollX,
end: point.X);
animation.Commit(
owner: this,
name: "Scroll",
length: 300,
easing: Easing.CubicIn);
值得指出的是,在iOS上,此代码还将视图移向顶部。您不想要的东西。我相信这是因为iOS将动画的输入理解为滚动视图的下边缘,而Android将其理解为滚动视图的上边缘。
为避免此跳转,请在iOS上将point.Y
设置为0:
// iOS seems to understand the input for the animation as the lower edge of the scrollview
// Android the upper edge.
if (Xamarin.Forms.Device.RuntimePlatform == Xamarin.Forms.Device.iOS)
{
point.Y = 0;
}
我仍然认为这个答案应该是编辑的,但是由于它被拒绝为“应该是答案或评论”,并且当然不能是评论,因此这里是作为答案。目的是更清楚地说明泰勒的答案涵盖了垂直动画,并展示了如何制作水平动画。