Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Marquee增强 #545

Open
j4587698 opened this issue Jan 16, 2025 · 13 comments
Open

Marquee增强 #545

j4587698 opened this issue Jan 16, 2025 · 13 comments
Labels
good first issue Good for newcomers new control New control

Comments

@j4587698
Copy link

Marquee是否可以添加一个参数实现文本超长滚动的效果?
从左侧对齐滚动到右侧对齐,控件高度和文本高度一致。

@rabbitism
Copy link
Member

左侧对齐滚动到右侧对齐

然后要怎么动?

@j4587698
Copy link
Author

就是如果一行文字超长,不截断,开始第一个字符对齐左边,最后最后一个字符对齐右侧。
类似
开始的时候显示 |这是一个很长的|
结束的时候显示 |是很长的字符串|

@rabbitism
Copy link
Member

rabbitism commented Jan 16, 2025

可是内容显示不一定是文字,我无法保证内容是一条可以被截断的文字。这只能重新针对text做一个新控件了。

我想问的是,到右边之后他就停在这里不动了么?

@j4587698
Copy link
Author

从网上找了个图,这个是鸿蒙原生marquee得样式,就类似这样吧,就是滚动文字是为了全部看完,到最后结束然后返回开头也可以,滚动到头再从头开始也可以。
QQ录得mp4好像直接网页播不了。

QQ.20250116121105.mp4

@rabbitism
Copy link
Member

没错这个效果只能针对文字做到,我们需要为这种场景设计新的控件,现有的Marquee是不可能实现这个效果的。

@j4587698
Copy link
Author

也不需要吧,只要我们能得到内部组件的宽度就行了,开始定位在0,0位置渲染,然后移动到x+bounds.width=组件宽度的时候就代表跑完了,执行下一轮?

@rabbitism
Copy link
Member

在Avalonia中,一个控件是不可以出现在两个地方的。怎么可以做到前一半在左边,后一半在右边呢?

@j4587698
Copy link
Author

我看这种好像是把控件复制一份,副本跟在后面。但是我觉得其实可以在控件到达最后的时候重置控件的位置到0,0,这样就可以只用一个控件实现了。效果也还可以

@j4587698
Copy link
Author

到达最后或者到达最后再往前多少位置,就重置到0,0

@rabbitism
Copy link
Member

到达最后或者到达最后再往前多少位置,就重置到0,0

前者就是现在实现的效果,后者就是会跳过去,和你视频的效果完全不一样

@j4587698
Copy link
Author

跟我视频的效果的确不一样,但是现在的实现是第一个字从最右边出来,最后一个字从最左边回去。我开始的想法就是可以设置不从最右边出来,而是从0,0这个位置开始。
举个例子的话就是假设我有一个字符串是 这是一个很长的字符串,但是屏幕上只能显示7个字符
那么起始位置 |这是一个很长的| 这样 ,
然后结束的时候可以到 |个很长的字符串| 或者到 |很长的字符串 | 结束,然后重新跳回 |这是一个很长的| 这个起始位置。
这种效果不如我视频里那种好,但是也可以用。

现在的样子的话是从 | 这| 这样开始的,然后到 |串 | 结束

@rabbitism
Copy link
Member

视频的效果的确不一样,但是现在的实现是第一个字从最右边出来,最后一个字从最左边回去。我开始的想法就是可以设置不从最右边出来,而是从0,0这个位置开始。
举个例子的话就是假设我有一个字符串是 这是一个很长的字符串,但是屏幕上只能显示7个字符
那么起始位置 |这是一个很长的| 这样 ,
然后结束的时候可以到 |个很长的字符串| 或者到 |很长的字符串 | 结束,然后重新跳回 |这是一个很长的| 这个起始位置。
这种效果不如我视频里那种好,但是也可

这样是可以,但是不如重做一个对Text做截断处理的

@j4587698
Copy link
Author

是的,肯定不如做一个截断处理的好看

@rabbitism rabbitism added good first issue Good for newcomers new control New control labels Jan 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers new control New control
Projects
None yet
Development

No branches or pull requests

2 participants