gpt4 book ai didi

java - 使用不同的 ScrollY 动态地将 TextView 添加到 FlipperView

转载 作者:行者123 更新时间:2023-12-01 16:41:33 26 4
gpt4 key购买 nike

我正在开发一个应用程序,并在几周前开始学习 Java。此时,我正在尝试做一些事情,但我无法弄清楚出了什么问题。

所以问题如下。我有一个 FlipperView,我想在其中动态添加 TextView,我应该能够在它们之间导航。这些 TextView 具有相同的内容和布局,它们之间唯一的区别是它们的“ScrollY”属性。我希望第一个 TextView 的 ScrollY 为 0,以便可以从头看到文本。然后,我希望下一个 TextView 的 ScrollY 为 0 + x,其中 x 是 TextView 的高度(最初定义为 match_parent)。下一个的 ScrollY 应该为 2x,等等。

为了完成这项工作,我尝试了很多方法。首先,我设法使用 .post 动态获取 TextView 的高度。现在,我可以更改第一个 TextView 的 ScrollY。对于其他 View ,我使用 for 循环。此时,TextView 已正确创建,我可以使用 FlipperView 在它们之间导航。但是,SetScrollY 函数在 for 循环内不起作用。我尝试向它提供任意整数而不是 TextView 的动态高度,但没有成功,所以我猜该函数在这种情况下根本不起作用。这是我的代码(循环数目前是固定的):

public int formatText(Context context, ViewFlipper textFlipper) {
int nbOfViews = 1;
final int[] viewMaxHeight = {0};
final int[] lineSpacing = {0};

textContent = context.getResources().getString(R.string.dummyText);

final TextView flipperView = new TextView(context, null, R.style.flipperText);

flipperView.setText(textContent);

textFlipper.addView(flipperView);

flipperView.post(new Runnable() {
@Override
public void run() {
viewMaxHeight[0] = flipperView.getHeight();
lineSpacing[0] = Math.round(flipperView.getLineSpacingExtra());
}
});

for(int i = 0; i < 2; i++) {
TextView flipperViewExtra = new TextView(context, null, R.style.flipperText);
flipperViewExtra.setText(textContent);
flipperViewExtra.setScrollY(viewMaxHeight[0] * nbOfViews + lineSpacing[0]);

textFlipper.addView(flipperViewExtra);

nbOfViews++;
}

return nbOfViews;
}

感谢任何帮助,谢谢!

最佳答案

您正在使用 THREAD,并且线程倾向于通过缓存使用变量来优化性能。因此,在线程之外的任何机会它都不会“看到”内存中的变化。要强制线程查看内存中的更改,您必须将变量声明为 volatile 。示例

final volatile int[] viewMaxHeight = {0};
final volatile int[] lineSpacing = {0};

关于java - 使用不同的 ScrollY 动态地将 TextView 添加到 FlipperView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61850337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com