2013-02-25 2 views
3

Вот мой код:В Android, как изменить цвет кнопки, приостановить на несколько секунд, а затем изменить ее снова?

public class TestActivity extends Activity {  

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     start(); 
    } 

    private void start() { 
     setContentView(R.layout.main); 

     LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout); 

     Button button = new Button(this); 

     layout.addView(button); 

     button.getBackground().setColorFilter(new LightingColorFilter(0x00000000, 0x0000FF00)); // green 
     button.invalidate(); 

     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     button.getBackground().setColorFilter(new LightingColorFilter(0x00000000, 0x000000FF)); // blue 
     button.invalidate(); 
    } 
} 

Это просто показывает синюю кнопку в течение 3 секунд; он никогда не показывает его как зеленый.

Я думаю, что если мой мозг работал должным образом, я мог понять, ответ от одного из этих сообщений:

Why isn't view.invalidate immediately redrawing the screen in my android game

How to force a view to redraw immediately before the next line of code is executed

How to force an entire layout View refresh?

ответ

2

Вам не следует спать в потоке пользовательского интерфейса, так как это повесит ваш интерфейс. Вместо этого после первоначальной установки цвета на зеленый вы можете создать обработчик (в потоке пользовательского интерфейса, чтобы он использовал этот поток для обработки сообщений), а затем используйте Handler.postDelayed для отправки сообщения, которое будет обрабатываться через 3 секунды. В Runnable вы переходите на postDelayed, вы можете установить цвет в синий.

1

спишь основной Пользовательский интерфейс практически сразу после установки цвета. Это означает, что поток заблокирован, прежде чем он получит возможность выполнить перерисовку.

Одним из решений этого является использование потоков. Установите цвет фона, затем используйте другой поток для сна, который по завершении вызывает основной (UI) поток, чтобы снова изменить цвет.

Вы можете попытаться найти AsyncTask или Threading.

Смежные вопросы