【问题标题】:Incrementing a value from $1 to $1.25 million with a timed interval as a Counter以定时间隔作为计数器将值从 1 美元增加到 125 万美元
【发布时间】:2016-01-22 19:11:37
【问题描述】:

可视化:这个数字从 0 美元开始增加到 125 万美元,并且在 UI 上使用每个增量之间的时间间隔(可能大约 50-100 毫秒?)来显示递增过程。我尝试设置它,但遗憾的是,下面的代码失败了。

double maxValue = 10;
double currentValue = 0;

@Override
    public void onCreate(Bundle savedInstanceState) {
    //more code

        value_text = (TextView) rootView.findViewById(R.id.value_text);

        for (int i = 0; i < maxValue; i++) {
            if (currentValue != maxValue) {
                try {
                    currentValue++;
                    value_text.setText(String.valueOf(currentValue));
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

棘手的部分: textview 将从 1 美元增长到 125 万美元,这意味着我们必须在达到第一个 100 万美元后更改为小数。每一步都快速显示在 UI 上。

你们有办法实现这种增量效果吗?

编辑:

我什至会很高兴现有的库(如果有的话)来实现这种递增效果

【问题讨论】:

  • 首先不要这样做,Thread.sleep(50); 在应用程序主 UI 线程上。使用TimerTask 并调用runOnUiThread 更新TextView 或者您可以使用Handler
  • @user370305 : “首先不要这样做。Thread.sleep(50); 在应用程序主 UI 线程上。” - 实际上,更好的建议是 永远不要使用Thread.sleeep(...) ... 永远。这是一个令人讨厌的不雅黑客。 ;)

标签: java android loops textview increment


【解决方案1】:

这样你永远不会看到更新,因为你在主线程(或 android 世界中的 Looper)上执行的每个操作。你应该尝试这样的事情:

private final static long MAX_VALUE = 1000000L;
private final static int TIME = 100L;

private final Handler handler = new Handler();
private long value = 1;


private void scheduleIncrementation() {
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (value < MAX_VALUE) {
                textView.setText(String.valueOf(value++));
            }

            handler.postDelayed(this, TIME);
        }
    }, TIME);
}

在 onCreate 方法中只需调用:

scheduleIncrementation();

【讨论】:

  • 有没有办法让它更快? :D 我把时间减少到 1L 但是,嘿,需要很长时间 :D
  • 在达到第一个百万后,我将如何处理数字坚持小数的百万部分? :)
  • 也许问题出在其他地方。这是您发布的整个代码吗?每 100 毫秒绘制一次更复杂的事情我没有问题,一切都很好:)
  • 不,它工作正常,但从 0 到 125 万需要很长时间。我想加快速度,所以我把你的时间从 100L 改成了 1L。它仍然有点慢。有没有办法让它增长得更快?
  • 所以增加更多:) value+=5。现在您需要大约 2.5 小时才能达到 100 万
猜你喜欢
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多