SurfaceView在游戏开发中有着举足轻重的地位,它对于画面的控制有着更大的自由度(不像View要用handler来更新)

package com.Aina.Android;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;/** * com.Aina.Android Pro_SurfaceView *  * @author Aina.huang E-mail: 674023920@qq.com * @version 创建时间:2010 Jun 9, 2010 11:22:35 AM 类说明 */public class MyView extends SurfaceView implements SurfaceHolder.Callback,Runnable {private SurfaceHolder holder;public static int x = 100, y = 100;public MyView(Context context) {super(context);Log.i("TAG", "MyView()");holder = this.getHolder();holder.addCallback(this);}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {Log.i("TAG", "surfaceChanged()");}public void surfaceCreated(SurfaceHolder holder) {new Thread(this).start();Log.i("TAG", "surfaceCreated()");}public void surfaceDestroyed(SurfaceHolder holder) {Log.i("TAG", "surfaceDestroyed()");}public void run() {try {while (!Thread.currentThread().isInterrupted()) {synchronized (holder) {this.onDraw();}Thread.sleep(100);}} catch (Exception ex) {ex.printStackTrace();}}public void onDraw() {Canvas canvas = holder.lockCanvas();Paint paint = new Paint();paint.setColor(Color.BLACK);Log.i("TAG", canvas.getWidth() + "|" + canvas.getHeight());canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);paint.setColor(Color.RED);paint.setAntiAlias(true);canvas.drawCircle(x, y, 30, paint);//canvas.drawRect(x, y, a, b, paint);holder.unlockCanvasAndPost(canvas);}}


package com.Aina.Android;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.MotionEvent;public class Test_SurfaceView extends Activity {    /** Called when the activity is first created. */private MyView mv;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mv = new MyView(this);        setContentView(mv);    }@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {        switch (keyCode) {           case KeyEvent.KEYCODE_DPAD_DOWN:// 向下                   MyView.y += 5;               break;           case KeyEvent.KEYCODE_DPAD_UP:// 向上                   MyView.y -= 5;               break;           case KeyEvent.KEYCODE_DPAD_LEFT:// 向左                  MyView.x -= 5;               break;           case KeyEvent.KEYCODE_DPAD_RIGHT:// 向右                   MyView.x += 5;               break;           default:               break;           } return super.onKeyDown(keyCode, event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {int x = (int) event.getX();int y = (int) event.getY();MyView.x = x;MyView.y = y;return super.onTouchEvent(event);}    }

更多相关文章

  1. Mac Android(安卓)屏幕同步/共享投影工具[Vysor]
  2. Android前台画面和后台service之间通信的方法之Broadcast
  3. Android系统的开机画面显示过程分析(12)
  4. 【Android】应用启动画面
  5. android mediareorder 使用实践总结
  6. Android系统的开机画面显示过程分析(4)
  7. Android之开启内置闹钟与已安装的应用程序设置
  8. Android系统的开机画面显示过程分析(11)
  9. Android-横屏应用在竖屏情况下解锁引起销毁

随机推荐

  1. android studio no marked region found
  2. Development and remote installation of
  3. 【Android】ToolBar设置NavigationIcon不
  4. Android(安卓)内核与标准Linux内核的区别
  5. 修改android默认语言选项
  6. Android(安卓)左右滑动切换页面或Activit
  7. android 自定义view支持gif格式播放
  8. android linux kernel和standard linux k
  9. Android中service之初见
  10. Android(安卓)Studio系列-签名打包