2011-10-09 47 views
-1

我正在使用一个漂亮的标准循环,每次增加100  毫秒的睡眠,但我想在中途添加文本颜色更改...但是,出现错误。下面的代码有问题吗?初始屏幕 - 在循环中更改小部件属性

public class splashActivity extends Activity { 
    TextView tv; 
    LinearLayout ll; 
    protected boolean _active=true; 
    protected int _splashTime=5000; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     tv=(TextView)findViewById(R.id.textViewSplash); 

     ll=(LinearLayout)findViewById(R.id.linearLayoutSplash); 

     Thread splashThread = new Thread(){ 
      @Override 
      public void run() { 
       try{ 
        int waited=0; 
        while (_active && waited < _splashTime){ 
         sleep(100); 
         if(_active){ 
          waited += 100; 
         } 
         if(waited >=2500){ 
         tv.setTextColor(Color.GREEN); 
         } 
        } 
       } 
       catch(InterruptedException e){ 
       } 
       finally{ 
        finish(); 
        startActivity(new Intent("com.kleaverdevelopment.splashTest.SplashTest.mainActivity")); //package.package.package.appName.nextActivity 
        stop(); 
       } 
      } 
     }; 
     splashThread.start(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      _active = false; 
     } 
     return true; 
    } 
} 

回答

1

您不能从后台线程更新UI元素(您的案例中的TextView)。请参阅关于UI and threading on Android的文章。

+0

不知道 - 谢谢彼得! – kleaver