关闭

Android中的View简介

标签: android
120人阅读 评论(0) 收藏 举报
分类:

     View类是Android的一个超类,找个类几乎包含了所有的屏幕类型。每一个View都有一个拥有绘图的画布,这个画布可以进行任意扩展。

在游戏开发中也可以自定义View,这个画布功能更能满足我们在游戏开发中的需要。在Android中任何一个View类都只需要重写onDraw方法

来实现界面显示,自定义的师徒可以是复杂的3D实现,也可以是非常简单的文本形式等。

    Android中提供了onKeyUp,onKeyDown,onKeyMultiple,onKeyPrelme,onTouchEvent等方法,可以轻松处理游戏中的事件信息。


   下面是一个例子,画了一个在屏幕上不停变换颜色的矩形(当然你也可以画圆形。。),我们定义一些事件可以通过模拟器的上下键调节矩形

的位置,比如上移或下移。

    效果图:




下面是代码

  自定义GameView类:

public class GameView extends View {

	int miCount=0;
	int y=0;
	
	public GameView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
	
	//画图类
	@Override
	protected void onDraw(Canvas 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;
	    default:
	    	mPaint.setColor(Color.WHITE);
				break;
		}
		
		//绘制矩形
		canvas.drawRect((320-80)/2,y,(320-80)/2+80,y+40, mPaint);
	}
	
}

刷新视图的类:

public class MainActivity extends Activity {

	private static final int REFRESH = 0X00001;
	// 声明GameView类对象
	private GameView mGameView = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 实例化GameView对象
		this.mGameView = new GameView(this);
		// 设置显示自定义的View
		setContentView(mGameView);
		// 开始线程
		new Thread(new GameThread()).start();
	}

	Handler mHandler = new Handler() {
		// 接收到消息后处理
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case MainActivity.REFRESH:
				mGameView.invalidate();
				break;
			}
			super.handleMessage(msg);
		}
	};

	class GameThread implements Runnable {

		@Override
		public void run() {
			while (!Thread.currentThread().isInterrupted()) {
				Message message = new Message();
				message.what = MainActivity.REFRESH;
				// 发送消息
				mHandler.sendMessage(message);
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}

	// 触笔事件
	public boolean onTouchEvent(MotionEvent event) {

		return true;
	}

	// 按键按下事件
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		return true;
	}

	// 按键弹起事件
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		switch (keyCode) {
		// 上方向键
		case KeyEvent.KEYCODE_DPAD_UP:
			mGameView.y -= 3;
			break;
		// 下方向键
		case KeyEvent.KEYCODE_DPAD_DOWN:
			mGameView.y += 3;
			break;
		}
		return false;
	}
	
	@Override
	public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
		
		return true;
	}

}



                                                      

                                                                                                                                                                                                                                                                    注:根据网络资料总结编写                                       

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:897次
    • 积分:86
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档