【问题标题】:display string on value change (higher value more characters)在值更改时显示字符串(更高的值更多的字符)
【发布时间】:2014-09-05 23:31:45
【问题描述】:

我正在考虑动态显示文本,但我有一个问题。

我的字符串很长....几千个字符或更多。而且我的价值随着时间的推移而增加。现在在开始时值为 0 我不想显示任何内容(到目前为止很容易:))但是随着值的增加我希望字符串慢慢出现(假设每个“增量”为 50)......它会是非常适合实现打字的效果。

我的解决方案是在 onCreate 方法中声明空字符串

string displayedText = "";

然后我会在等待增量的处理程序中调用显示函数

private Handler mHandler = new Handler() {
    @Override public void handleMessage(Message msg) {

        switch (msg.what) {
            case VALUE_CHANGE:
                value = (int)msg.arg1;  // get value from message
                mValueView.setText("" + mStepValue); // display value on screen
                //here call the function to display text
                break;

            default:
                super.handleMessage(msg);
        }
    }
};

到目前为止,这正在工作......现在(对我而言)显示文本的问题部分。该值可以以不同的时间发送,从递增到 10 秒之间的 1 秒(值变化时是随机的)

【问题讨论】:

  • 在显示文本方法里面做什么?问题出在哪里?
  • 好吧,我还没有显示文本方法,因为我不知道如何一次从字符串中提取一个字符以添加到显示的文本中
  • 你能把你的问题解释清楚一点吗?现在您说您在提取文本时遇到问题。您的问题主题说明了不同的内容。
  • 我有一个文本,我想随着值的增长越来越多地显示,所以例如值为 0 我可以从文本中看到 0 个字符,当值为 2 我可以从文本中看到 60 个字符值为 4 我可以从文本等中看到 120 个字符。

标签: java android


【解决方案1】:

使用substring 方法从完整的String 中提取。

private String extractText(String input, int length)
{
 return input.substring(0, length - 1);
}

【讨论】:

  • 谢谢 :) 很抱歉混淆了问题的解释......英语不是我的母语
  • 没问题。如果它解决了您的问题,请接受答案。
【解决方案2】:

使用延迟消息。没有繁重的 UI。

private boolean isCanChange = true;
private Handler mHandler = new Handler() {
    @Override public void handleMessage(Message msg) {

        switch (msg.what) {
            case VALUE_CHANGE:
                value = (int)msg.arg1;  // get value from message
                mValueView.setText("" + mStepValue); // display value on screen
                //here call the function to display text
                isCanChange = true;
                break;

            default:
                super.handleMessage(msg);
        }
    }
};

while(isParsingRunning) {
    //running parse thread
    if(isCanChange) {
        isCanChange = false;
        mHandler.sendEmptyMessageDelayed(VALUE_CHANGE, 1000);// update every second 
    }
}

降低更新速度

public void parseDocument(...)
{
    long startParsingTime= System.currentTimeMillis();
    while(isParsing) {
         // parse
        if(isCanChange) {
            isCanChange = false;
            mHandler.sendEmptyMessageDelayed(VALUE_CHANGE, (System.currentTimeMillis() - startParsingTime)/1000);// update every second 
        }
    }
}

注意:可能你需要强制转换。我手头上没有任何 IDE。

【讨论】:

  • 我对解释问题有点困惑......接收消息有效:)
猜你喜欢
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2015-04-25
  • 2020-08-12
相关资源
最近更新 更多