Android 画图类View与SurfaceView之学习
在开发游戏开发中,android相应的提供了几个重要的模块:
1、显示界面的视图: Android 提供 View 和 SurfaceView
2、控制游戏整体结构: android 提供 Activity
3、逻辑控制类:专门用于处理游戏的逻辑计算
4、处理游戏界面与用户交互事件 : 利用 View 类提供的 onKeyDown onKeyUp onTounchEvent等方法
我们这里简单熟悉一下如何在视图上画东西。
1、View 类: android.view.View
View 是Android中的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘画的画布,这个画布 可以进行任何扩展。
任何一个View类都只需要重写onDraw方法来实现界面显示,任何一个View都只需要重写 OnDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本或位图。
Android 中有个重要的东东: Android UI 线程
在这里 http://blog.csdn.net/andyhuabing/article/details/11921887 有对其简要精典的介绍及注意点,这里就不再重复说明了。
这里来个简单例子说明一下View的用法,利用线程变更显示颜色,通过上下左右移动矩形
TestView.java 类如下:
package com.example.testondraw;import java.util.List;import android.app.Activity;import android.app.ActivityManager;import android.content.Context;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.DisplayMetrics;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MainActivity extends Activity {static final String TAG = "MainActivity";private TestSurfaceView mTestSurfaceView = null;private int mWidth = 0, mHeight = 0;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initView();startTestSurfaceView();// setContentView(R.layout.main);}void initView() {// 使用自定义的ViewmTestSurfaceView = new TestSurfaceView(this);setContentView(mTestSurfaceView);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);mWidth = dm.widthPixels;mHeight = dm.heightPixels;Log.i(TAG, "Display Metrics width:" + mWidth + " mHeight:" + mHeight);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}public boolean onKeyDown(int keyCode, android.view.KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_DOWN:if (mTestSurfaceView.y >= mHeight)mTestSurfaceView.y = 0;mTestSurfaceView.y += 10;break;case KeyEvent.KEYCODE_DPAD_UP:if (mTestSurfaceView.y <= 0)mTestSurfaceView.y = mHeight;mTestSurfaceView.y -= 10;break;case KeyEvent.KEYCODE_DPAD_LEFT:if (mTestSurfaceView.x <= 0)mTestSurfaceView.x = mWidth;mTestSurfaceView.x -= 10;break;case KeyEvent.KEYCODE_DPAD_RIGHT:if (mTestSurfaceView.x >= mWidth)mTestSurfaceView.x = 0;mTestSurfaceView.x += 10;break;case KeyEvent.KEYCODE_BACK:this.finish();break;}return false;};void startTestSurfaceView() {mTestSurfaceView.setDisplayWH(mWidth, mHeight); }}