现在我正在为我的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);
}
}
答案 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 ,这将是处理永不结束任务的好方法,而不是使用无限循环。