其实文字游戏程序很简单,就是一个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
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
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
本文出自 “失落的程序” 博客,请务必保留此出处http://350526.blog.51cto.com/340526/365716
转载于:https://blog.51cto.com/yuzuolin/1331971