什么是制作闪烁文本的正确方法?



我有一个textview和我有许多按钮。其中一个按钮应该能够启动"动画",它不是动画中的动画,它只需要让文本变红2秒,而不是文本变绿2秒,然后再变红....-其中一个按钮应该停止"动画"并将文本设置为白色-应该让文本变回1秒,然后变蓝2秒,然后再变黑…

关键是按钮应该能够被用户在任何时候按下。

我想我应该使用处理程序,但我不确定模式,我不知道线程的停止应该是什么样子,我的意思是当我启动线程时,以后我应该告诉他停止…最好的方法是什么?

我在写代码时总是用这种愚蠢的方法思考,而且我不知道什么是模式,什么是正确的方法来做这件事?

感谢

这里是我如何做的一些代码,但我觉得这不是正确的方法

 private boolean flagForStop=true;
    private Handler handler1=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 0:
                flagForStop=false;
            case 1:
                flagForStop=true;
              break;
            case 2:
                new Thread(){
                    public void run(){
                        while(true){
                            if(flagForStop)break;
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            //do something
                        }
                    }
                }.start();
                break;
            default:
                break;
            }
        }
    };

,然后是侦听器handler1.sendEmptyMessage (0);

我是这样做的,它不是完美的,但它应该适用于你上面提到的所有类型的动画

首先创建一个名为AnimStep的类,它包含两个字段:timecolor。构造函数是AnimStep(int time, String color)

然后创建一个名为AnimSequence的类,其中包含一个AnimStep对象数组。您可以使用this.getStep(index)获得一个特定的步骤。

例如AnimSequence For "pink 2 seconds then magenta 3 seconds then black forever"将包含以下AnimSteps数组:{new AnimStep(0, "pink"), new AnimStep(2, "magenta"), new AnimStep(5, "black")}

然后创建一个名为Animation的类,它在一个单独的线程中永久运行并定期唤醒(例如每100毫秒)。这个类有三个字段:
  • sequence:指向AnimSequence对象的指针
  • startTime:时间戳
  • step:一个整数,表示AnimStep
  • 数组中元素的索引。

当你点击一个按钮时,你传递了一个AnimSequence给Animation。这个设置了这个。序列到给定的AnimSequence,这。startTime =, this。步骤= 1。它还将文本的颜色设置为AnimSequence中第一个AnimStep的颜色。

现在每次动画唤醒时,它都做以下操作:

if (this.step >= this.sequence.size()) return // do nothing
currentStep = this.sequence.getStep(this.step)
elapsedTime = <current time stamp for now> - this.time
if (elapsedTime >= currentStep.time) {
  this.step++
  yourtext.color = currentStep.color
}

最新更新