利用Handler更新Android UI的另一种方法

其实文字游戏程序很简单,就是一个view和一个Activity,在利用下handier和postInvalidate()更新UI
我要实现的是一个蓝色正方形向右移出屏
调用Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate()
1 package com.Test.androidtest;        
2        
3     import android.app.Activity;        
4     import android.content.Context;        
5     import android.graphics.Canvas;        
6     import android.graphics.Color;        
7     import android.graphics.Paint;        
8     import android.os.Bundle;        
9     import android.os.Handler;        
10 import android.view.View;        
11        
12 public class TestHandler extends Activity {        
13         private MyView myView;        
14         private Handler mHandler;        
15         public void onCreate(Bundle savedInstanceState) {        
16                 super.onCreate(savedInstanceState);        
17                 myView = new MyView( this);        
18                 mHandler = new Handler();        
19                 mHandler.post( new Runnable(){        
20                         @Override    
21                         public void run() {        
22                                 myView.invalidate();        
23                                 mHandler.postDelayed( this, 5);        
24                         }        
25                    });        
26                 setContentView(myView);     27         }        
28                
29         class MyView extends View{     30                 private float x = 0f;     31                 public MyView(Context context) {        
32                         super(context);     33                                
34         }        
35                 protected void onDraw(Canvas canvas) {        
36                         super.onDraw(canvas);     37                         x+=1;        
38                         Paint mPaint = new Paint();        
39                         mPaint.setColor(Color.BLUE);        
40                         canvas.drawRect(x,    
40, x+40, 80, mPaint);     41                 }        
42                        
43         }        
44 }    
45
在新线程里更新UI,可以直接postInvalidate()
1 public void onCreate(Bundle savedInstanceState) {                
2                                 super.onCreate(savedInstanceState);                
3                                 this.requestWindowFeature(Window.FEATURE_NO_TITLE);                
4                
5                                myView = new MyView( this);        
6                 this.setContentView( this.myView);                
7                 new Thread( new myThread()).start();                
8 }                
9            
10         class myThread implements Runnable {                
11                     public void run() {            
12                             while (!Thread.currentThread().isInterrupted()) {                
13                                         try {        
14                                                     myView.postInvalidate();        
15                                                 Thread.sleep(100);                
16                                        } catch (InterruptedException e) {                
17                                                 Thread.currentThread().interrupt();            
18                                        }                
19                                }                
20                     }                
21         }        
22


你可能感兴趣的:(android,handler,游戏程序)