Xamarin Forms,ScrollView ScrollToAsync Speed

时间:2018-01-17 18:49:36

标签: android xamarin.forms scrollview renderer

任何人都知道如何在Xamarin.Forms.ScrollView控件的ScrollToAsync方法中更改滚动动画的速度?

我正在使用Xamarin Forms开发Android应用程序。 感谢

3 个答案:

答案 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;
   }

我仍然认为这个答案应该是编辑的,但是由于它被拒绝为“应该是答案或评论”,并且当然不能是评论,因此这里是作为答案。目的是更清楚地说明泰勒的答案涵盖了垂直动画,并展示了如何制作水平动画。