2011-02-26 2 views
1

두 가지 색상의 레이아웃 (선형 레이아웃)을 연속적으로 전환하려고하는 앱에서 작업하고 있지만 색상이 예상대로 변경되지 않습니다. 응용 프로그램을 실행할 때 기다렸다가 마지막에 언급 된 색상 만 변경되고 너무 자주 한 번 응용 프로그램이 색상 변경을 시도하자마자 레이아웃이 색상을 변경할 수 없다고 생각됩니다. 앱은 한 번만 색상을 변경할 수 있습니다.두 레이아웃 색상 사이를 반복적으로 뒤집기

아래 코드

flasher.java

package com.tutorial.flasher; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
//import android.os.SystemClock; 
import android.widget.LinearLayout; 


public class flasher extends Activity { 
    /** Called when the activity is first created. */ 
    LinearLayout llaLayout; 
    int a,b = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     llaLayout = (LinearLayout)findViewById(R.id.layo); 

     for (int i=0;i<4;i++) 
     { 
      //SystemClock.sleep(2000); 

      //llaLayout.buildDrawingCache() 
      Thread.currentThread(); 
      try 
      { 
      Thread.sleep(2000); 
      } 
      catch (Exception e) 
      { 
       e.notifyAll(); 

      } 
      llaLayout.setBackgroundColor(Color.parseColor("#0000FF")); 

      //SystemClock.sleep(2000); 
      Thread.currentThread(); 
      try 
      { 
      Thread.sleep(2000); 
      } 
      catch (Exception e) 
      { 
       e.notifyAll(); 

      } 
      llaLayout.setBackgroundColor(Color.parseColor("#FF0000")); 

     // SystemClock.sleep(2000); 
     } 
    } 
} 

난 단지 레이아웃에 레드 컬러를 얻고있다.

감사합니다, 시드

답변

0

당신은 메인 스레드에서 차단할 수 없습니다. 그러면 응용 프로그램이 즉시 응답하지 않게됩니다.

이렇게하려면 타이머 나 별도의 스레드를 사용할 수 있습니다. UI 스레드에서 실제 UI 관련 기능 (setBackgroundColor)을 수행하기 만하면됩니다. 이를 위해 Activity.runOnUiThread을 사용할 수 있습니다.

+0

감사합니다. Activity.runOnUiThread를 통해 UI 관련 함수를 실행하려고했지만 예상대로 작동하지 않았습니다. 이번에는 처음 언급 한 색상 (빨강)을 얻었으며, 여기 코드 스 니펫이 있습니다. setBackground 방법은 아래에 언급 된 섹션에 의해 레이아웃. \t _activity.runOnUiThread (새의 Runnable() { \t 공공 무효 실행() { \t \t llaLayout.setBackgroundColor (Color.parseColor ("#의 FF0000")); \t \t \t} }); \t 감사합니다. Sid – Sid

1

Handler을 사용하여이를 수행 할 수 있습니다. 예를 들어 :

private boolean bool = true; 
llaLayout = (LinearLayout)findViewById(R.id.layo); 
final Handler mHandler = new Handler(); 
mHandler.postDelayed(new Runnable(){ 
      @Override 
      public void run() { 
       mHandler.postDelayed(this, 1000); 
       changeColor();    
      } 
      private void changeColor() { 
       if (bool) { 
        llaLayout.setBackgroundColor(Color.RED); 
        bool = false; 
       } else { 
        llaLayout.setBackgroundColor(Color.BLUE); 
        bool = true; 
       }    
      }}, 1000); 

이 코드는 재귀 적으로 (1000)는 다음을 호출하는 시간 (밀리 초)가 동일한 기능 changeColor()를 호출합니다. 도움이 되길 바랍니다.

관련 문제