Android的View类使用

View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘画的画布,这个画布可以进行任意的扩展。在Android中,任何一个View类都只需要重写onDraw方法来实现界面显示,视图可以显示简单的文本,也可以显示复杂的3D。游戏的核心就是不断的刷新界面和绘制界面,Android提供了invalidate方法来实现界面的刷新,在Android中经常借助Handler实现界面的刷新。废话就不多说了,请下面的例子。

效果图如下:

入口Activity代码如下:

package nyl.viewdemo1;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
 
public class MainActivity extends Activity {
	private GameView mGameView;
	public static final int REFRESH = 0;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //显示GameView游戏窗体
        mGameView = new GameView(this);
        setContentView(mGameView);
 
        //开启线程
        new Thread(new GameThread()).start();
    }
 
    /**
     * 线程的实现有两种方式:
     * 第一:实现Runnable接口,重新run()方法;
     * 第二:继承Thread类,重写run()方法;
     * @author Administrator
     */
    class GameThread implements Runnable {
		@Override
		public void run() {
			/**
			 * currentThread() 返回当前正在执行的线程的对象的引用
			 * isInterrupted() 测试线程是否中断
			 */
			while (!Thread.currentThread().isInterrupted()) {
				//发送消息
				Message message = new Message();
				message.what = REFRESH;
				mHandler.sendMessage(message);
				try {
					//等待一百毫秒
					Thread.sleep(100);
				} catch (InterruptedException e){
					Thread.currentThread().interrupt();
				}
			}
		}
    }
 
   Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			//处理消息
			switch (msg.what)
			{
			case REFRESH:
				//刷新游戏窗体
				mGameView.invalidate();
				break;
			}
			super.handleMessage(msg);
		}
    };
} 

游戏界面代码如下:

package nyl.viewdemo1;
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
 
public class GameView extends View {
	private int miCount = 0;
	int y = 0;
	public GameView(Context context) {
		super(context);
	}
 
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		if (miCount < 100) {
			miCount++;
		} else {
			miCount = 0;
		}
		Paint mPaint = new Paint();
		switch (miCount % 4)
		{
		case 0:
			mPaint.setColor(Color.BLUE);
			break;
		case 1:
			mPaint.setColor(Color.GREEN);
			break;
		case 2:
			mPaint.setColor(Color.RED);
			break;
		case 3:
			mPaint.setColor(Color.WHITE);
			break;
		}
		//绘制矩形
		canvas.drawRect(200, 100, 400, 300, mPaint);
	}
} 



你可能感兴趣的:(Android)