使TextView在"弹跳"中滚动其内容时尚

时间:2016-02-17 07:37:59

标签: android xamarin xamarin.android xamarin.forms

现在我正在为我的Xamarin.Forms标签实现一个自定义渲染器,我可以利用它来使用TextView的字幕滚动功能。

我现在想要做的是将文本的滚动模式从无休止地改为向左跳转到#34;弹跳"从一边到另一边。 (有点像我在这个问题上找到的这个问题:How to make a label scroll a word back and forth?)我没有在网上找到任何有关此问题的资源。如果你能给我一个关于在哪里看或做什么的一般概念,我将非常高兴。

感谢您的时间

这是我的字幕自定义渲染器:

    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        MarqueeLabel marqLabel = (MarqueeLabel)this.Element;
        base.OnElementChanged(e);
        if (marqLabel.shouldScroll)
        {
            Control.SetSingleLine(true);
            Control.SetHorizontallyScrolling(true);
            Control.Selected = true;
            Control.Ellipsize = Android.Text.TextUtils.TruncateAt.Marquee;
            Control.SetMarqueeRepeatLimit(-1); 
        }
    }

2 个答案:

答案 0 :(得分:0)

如果您可以在Xamarin.Forms级别上制作动画,那么您可以节省相当多的工作,而不是在每个特定于平台的级别上实现。

尝试以下示例演示屏幕边缘的Label弹跳,因为它可能会给你一些想法?请注意,它不会在下面的示例中连续执行。

StackLayout objStackLayout = new StackLayout()            
{
    Orientation = StackOrientation.Vertical,
};

Label objLabel = new Label();
objLabel.Text="Hello";
objLabel.HorizontalOptions = LayoutOptions.Start;
objStackLayout.Children.Add(objLabel);


Button objButton1 = new Button()
{
    Text = "Animate"
};

objButton1.Clicked += (async (o2, e2) =>
{
    double dblWidth = objStackLayout.Width - objLabel.Width;
    //
    await objLabel.TranslateTo(dblWidth, 0,1000, Easing.BounceIn);
    await objLabel.TranslateTo(0,0,1000, Easing.BounceIn);
});

objStackLayout.Children.Add(objButton1);

答案 1 :(得分:0)

这不是一个很好的方法,但我相信这会解决你的问题。

{{1}}

注意:您可以删除无限循环并尝试使用 TPL ,这将是处理永不结束任务的好方法,而不是使用无限循环。