Android自带示例程序--Snake
Android示例程序------->Snake解析(1)
2011-05-11 19:40:02
Android SDK中自带的有很多示例程序,这是我我们提高的很好的途径,多看这些文档对我们提高很有帮助。
此篇是对Snake的初步分析,后续还会更新较完整的解析。由于本人是初学Android 如果有错的地方或者更好的实现方法,
请不吝赐教,帮助处于新手阶段的我们。
分析Snake的程序,此程序的主体都是一个一个的小方块的东西实现的,android程序中叫TileView(切片),只是颜色不同而已。所以此篇我们从画一个TileView学起。
下面来看代码部分:
1.先自己定义一个类DrawSnakeNode继承View 用来画出一个方块;
package com.yin.snake; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; public class DrawSnakeNode extends View { //每个Node(节点)的大小 private final int mTileSize =12; // private static String TAG = "SnakeDemo"; //新建一个画笔 private static Paint paint = new Paint(); private Bitmap mBitmap; //Node的坐标(x,y) private int x; private int y; public DrawView(Context context) { super(context); //获得一个Bitmap对象 mBitmap = loadTile(); } //继承自View的类的构造函数,必须重载,否则会抛出异常 public DrawView(Context context, AttributeSet attrs) { super(context, attrs); } //继承自View的类的构造函数,必须重载,否则会抛出异常 public DrawView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public Bitmap loadTile(){ Resources r = getResources(); //获取图片的资源,Snake程序自带的有此图片 Drawable tile = r.getDrawable(R.drawable.greenstar); /** * 创建一个Bitmap *width : The width of the bitmap *height :The height of the bitmap *config :The bitmap config to create. * */ Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize,Bitmap.Config.ARGB_8888 ); Canvas canvas = new Canvas(bitmap); //设置图像的边界 tile.setBounds(0, 0, mTileSize, mTileSize); tile.draw(canvas); return bitmap; } //每次重画调用此方法 protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(mBitmap, x, y, paint); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }
2.创建一个控制类来控制Snake的移动 此篇是方块的移动
package com.yin.snake; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; public class ContralSnake extends Activity { DrawSnakeNode dsn; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dsn = new DrawView(getApplicationContext()); // setContentView(R.layout.main); setContentView(dsn); } public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ dv.setY(dv.getY()-10); }else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){ dv.setY(dv.getY()+10); }else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){ dv.setX(dv.getX()-10); }else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){ dv.setX(dv.getX()+10); } //强制重画(跟新当前画面) dv.invalidate(); return super.onKeyDown(keyCode, event); } }
由于Bitmap等很多画图是来自JAVA中,不是很熟悉,可能写的有错误的地方,请积极指出,多多交流。
更多相关文章
- Andorid Dialog 示例【慢慢更新】
- Action for BroadcastReceiver's method
- 【startActivityForResult】Android(安卓)Activity回传数据
- Android(安卓)PureMVC
- TabHost两种实现方式
- Ubunu下搭建android NDK环境
- android中textView周围显示图片
- 自定义SeekBar主题
- android SQLite数据库基本操作示例