Как правильно сделать мигающий текст - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть текстовое представление и у меня много кнопок.Одна из кнопок должна быть в состоянии запустить «анимацию», ну, это не анимация в аниме, она просто должна сделать текст красным на 2 секунды, затем текст должен стать зеленым на 2 секунды, а затем снова вернуться к красному... - одна из кнопок должна остановить «анимацию» и установить текст белым цветом - один должен сделать текст обратно на 1 секунду, затем синим на 2 секунды и снова вернуться к черному ...

точкаЭто кнопки должны быть в состоянии нажать пользователя в любое время.

Я думаю, что я должен использовать Handler, но я не уверен в скороговорке, я не знаю, как должно выглядеть остановка потокаЯ имею в виду, когда я запускаю поток, позже я должен сказать ему, чтобы он прекратил ... Какой лучший способ сделать это?что такое шаблон, какой правильный способ сделать это?

Спасибо

Вот код, как я это делаю, но я чувствую, что это не правильный путь

 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);

1 Ответ

0 голосов
/ 23 сентября 2011

Вот как я бы это сделал, он не идеален, но он должен работать для всех типов анимации, которые вы упомянули выше.

Сначала создайте класс с именем AnimStep , который содержитдва поля: время и цвет .Конструктор - AnimStep (int time, String color)

Затем создайте класс с именем AnimSequence , который содержит массив объектов AnimStep.Вы получаете определенный шаг с помощью this.getStep (index).

Например, AnimSequence для «розовых 2 секунд, затем пурпурных 3 секунд, затем черных навсегда» будет содержать следующий массив AnimSteps: {новый AnimStep (0, "розовый"), новый AnimStep (2, "пурпурный"), новый AnimStep (5, "черный")}

Затем создайте класс с именем Animation , который выполняетсяпостоянно в отдельном потоке и регулярно просыпается (например, каждые 100 мс).Этот класс имеет три поля:

  • sequence : указатель на объект AnimSequence
  • startTime : отметка времени
  • step : целое число, представляющее индекс элемента в массиве AnimStep

Когда вы нажимаете кнопку, вы передаете AnimSequence в Animation.Это устанавливает this.sequence для данного AnimSequence, this.startTime =, this.step = 1. Он также устанавливает цвет текста на цвет вашего первого AnimStep в AnimSequence.

Теперь каждый раз, когда анимацияпросыпается, делает следующее:

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
}
...