如何在android中制作文本动画?

时间:2012-03-29 15:24:13

标签: android

在我的Android应用程序中,我试图显示一个“加载...”文本,它将每100毫秒更改一次。每100毫秒后,它将增加一个点。所以首先它会像“正在加载”。然后又是100毫秒它将是“正在加载...”当它将是“正在加载...”时,此过程将终止并再次从第一个单词开始。它将持续到3500毫秒。这将非常像进度条。

我希望我能够解释这个问题。

如何解决此问题?请帮忙。

4 个答案:

答案 0 :(得分:4)

不是最佳答案,但确实有效。

    Handler handler = new Handler();

    for (int i = 100; i <= 3500; i=i+100) {
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                if(i%300 == 0){
                    textView.setText("Loading.");
                }else if(i%200 == 0){
                    textView.setText("Loading..");
                }else if(i%100 == 0){
                    textView.setText("Loading...");
                }
            }
        }, i);
    }

答案 1 :(得分:3)

CountdownTimer似乎合适,更改onTick中的文字。

答案 2 :(得分:1)

您应该使用AsyncTask。此类用于执行长时间运行的后台任务,这些任务将发布更新并自动在UI线程上运行。

doInBackground中,让您的循环调用publishProgress,每隔100毫秒调用onProgressUpdate一次。

这将在后台完成,onProgressUpdate将自动在UI线程上运行。

有些内容:

private class ShowLoading extends AsyncTask<Void, Integer, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        for (int i = 0; i < 3500; i++){
            publishProgress(i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return null;
    }


    @Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);

        if (values[0]%3 == 0){
            textview.setText ("Loading.");
        } else if (values[0]%3 == 1){
            textview.setText ("Loading..");
        } else if (values[0]%3 == 2){
            textview.setText ("Loading..");
        }
    }
}

答案 3 :(得分:0)

Kotlin动画片段(正在加载...):

ValueAnimator.ofInt(0, 4).apply {
        repeatCount = 10
        duration = 1000
        addUpdateListener { valueAnimator ->
                val dotsCount = valueAnimator.getAnimatedValue() as Int
                if (dotsCount < 4) {
                    spannable.setSpan(transparentColorSpan, 7 + dotsCount, 10,
                                  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
                    textView.invalidate()
                }
      }
}.start()