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中,不是很熟悉,可能写的有错误的地方,请积极指出,多多交流。



更多相关文章

  1. Andorid Dialog 示例【慢慢更新】
  2. Action for BroadcastReceiver's method
  3. 【startActivityForResult】Android(安卓)Activity回传数据
  4. Android(安卓)PureMVC
  5. TabHost两种实现方式
  6. Ubunu下搭建android NDK环境
  7. android中textView周围显示图片
  8. 自定义SeekBar主题
  9. android SQLite数据库基本操作示例

随机推荐

  1. android demo之ApiDemos下的text
  2. android打包apk流程
  3. Android(安卓)内存泄漏调试
  4. Android(安卓)开发中使用 SQLite 数据库
  5. Android(安卓)滑动效果高级篇(七)—— 华丽
  6. Android(安卓)事件分发机制总结
  7. Android的4种文件类型Java,class,dex,apk
  8. android 数据库sqlite的使用
  9. 【幻灯片分享】Android消息推送实现 | 友
  10. Android中的13种Drawable小结