Android应用开发揭秘的第7个程序5_2_SurfaceViewDrawCircle修改版和高仿版的源码注释

//利用SurfaceView类画图框架程序

 

Activity01.java

package com.SurfaceViewDrawCircle;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;

public class Activity01 extends Activity
{
 GameSurfaceView mGameSurfaceView;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  
  /* 创建GameSurfaceView对象 */
  mGameSurfaceView = new GameSurfaceView(this);
  
  //设置显示GameSurfaceView视图
  setContentView(mGameSurfaceView);
   
 }
 
 //触笔事件
 public boolean onTouchEvent(MotionEvent event)
 {
  return true;
 }
 
 //按键按下事件
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
  switch (keyCode)
  {
  //上方向键
  case KeyEvent.KEYCODE_DPAD_UP:
   mGameSurfaceView.y-=5;
   break;
  //下方向键
  case KeyEvent.KEYCODE_DPAD_DOWN:
   mGameSurfaceView.y+=5;
   break;
  //左方向键
  case KeyEvent.KEYCODE_DPAD_LEFT:
   mGameSurfaceView.x-=5;
   break;
  //右方向键
  case KeyEvent.KEYCODE_DPAD_RIGHT:
   mGameSurfaceView.x+=5;
   break; 
  }
  //return false;
  super.onKeyDown(keyCode,event);
     return true;
    }
   
 //按键弹起事件
 public boolean onKeyUp(int keyCode, KeyEvent event)
 {
  switch (keyCode)
  {
  //上方向键
  case KeyEvent.KEYCODE_DPAD_UP:
   mGameSurfaceView.y-=5; //3
   break;
  //下方向键
  case KeyEvent.KEYCODE_DPAD_DOWN:
   mGameSurfaceView.y+=5;
   break;
  //左方向键
  case KeyEvent.KEYCODE_DPAD_LEFT:
   mGameSurfaceView.x-=5;
   break;
  //右方向键
  case KeyEvent.KEYCODE_DPAD_RIGHT:
   mGameSurfaceView.x+=5;
   break;  
  }
  //return false;
  super.onKeyUp(keyCode,event);
  return true;
 }
 
 public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
 {
  return true;
 }
}

 

 

GameSurfaceView.java

 

package com.SurfaceViewDrawCircle;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class GameSurfaceView extends SurfaceView
        implements SurfaceHolder.Callback,Runnable
{
 //控制循环
 boolean   mbLoop   = false;
 
 //定义SurfaceHolder对象
 SurfaceHolder mSurfaceHolder = null;
 int    miCount   = 0;
 int    y    = 0;
 int    x    = 0;


 public GameSurfaceView(Context context)
 {
  super(context);

  // 实例化SurfaceHolder
  mSurfaceHolder = this.getHolder();

  // 添加回调
  mSurfaceHolder.addCallback(this);
  this.setFocusable(true);

  mbLoop = true;
 }


 // 在surface的大小发生改变时激发
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
 {

 }

 // 在surface创建时激发
 public void surfaceCreated(SurfaceHolder holder)
 {
  //开启绘图线程
  new Thread(this).start();
 }

 // 在surface销毁时激发
 public void surfaceDestroyed(SurfaceHolder holder)
 {
  // 停止循环
  mbLoop = false;
 }

 // 绘图循环
 public void run()
 {
  while (mbLoop)
  {
   try
   {
    Thread.yield();//sleep(200);
   }
   catch (Exception e)
   {
    
   }
   synchronized( mSurfaceHolder )
   {
    Draw();
   }
   
  }
 }

 // 绘图方法
 public void Draw()
 {
  //锁定画布,得到canvas
  Canvas canvas= mSurfaceHolder.lockCanvas();

  if (mSurfaceHolder==null || canvas == null )
  {
   return;
  }
  
  if (miCount < 100)
  {
   miCount++;
  }
  else
  {
   miCount = 0;
  }
  // 绘图
  Paint mPaint = new Paint();
  mPaint.setAntiAlias(true);
  mPaint.setColor(Color.BLACK);
  //绘制矩形--清屏作用
  canvas.drawRect(0, 0, 320, 480, mPaint);
  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.YELLOW);
   break;
  default:
   mPaint.setColor(Color.WHITE);
   break;
  }
  
  mPaint.setColor(Color.GREEN);
  // 绘制圆形--后面我们将详细讲解
  //canvas.drawCircle((320 - 25) / 2, y, 50, mPaint);
   canvas.drawCircle((320-100)/2+x, (480-100)/2+y, 50, mPaint);
  // 绘制后解锁,绘制后必须解锁才能显示
  mSurfaceHolder.unlockCanvasAndPost(canvas);
 }
}

 

Gf_SurfaceViewDrawCircleActivity.java

 

package packagename.GfSurfaceViewDrawCircle;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;

public class Gf_SurfaceViewDrawCircleActivity extends Activity
{
 GameSurfaceView mGameSurfaceView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
  /* 创建GameSurfaceView对象 */
  mGameSurfaceView = new GameSurfaceView(this);
  
  //设置显示GameSurfaceView视图
  setContentView(mGameSurfaceView);
    }
   
  //触笔事件
   public boolean onTouchEvent(MotionEvent event)
   {
    return true;
   }
   
   //按键按下事件
      public boolean onKeyDown(int keyCode, KeyEvent event)
      {
    switch (keyCode)
    {
    //上方向键
    case KeyEvent.KEYCODE_DPAD_UP:
     mGameSurfaceView.y-=5;
     break;
    //下方向键
    case KeyEvent.KEYCODE_DPAD_DOWN:
     mGameSurfaceView.y+=5;
     break;
    //左方向键
    case KeyEvent.KEYCODE_DPAD_LEFT:
     mGameSurfaceView.x-=5;
     break;
    //右方向键
    case KeyEvent.KEYCODE_DPAD_RIGHT:
     mGameSurfaceView.x+=5;
     break; 
    }
    //return false;
    super.onKeyDown(keyCode,event);
       return true;
      }
     
   //按键弹起事件
   public boolean onKeyUp(int keyCode, KeyEvent event)
   {
    switch (keyCode)
    {
    //上方向键
    case KeyEvent.KEYCODE_DPAD_UP:
     mGameSurfaceView.y-=5; //3
     break;
    //下方向键
    case KeyEvent.KEYCODE_DPAD_DOWN:
     mGameSurfaceView.y+=5;
     break;
    //左方向键
    case KeyEvent.KEYCODE_DPAD_LEFT:
     mGameSurfaceView.x-=5;
     break;
    //右方向键
    case KeyEvent.KEYCODE_DPAD_RIGHT:
     mGameSurfaceView.x+=5;
     break;  
    }
    //return false;
    super.onKeyUp(keyCode,event);
    return true;
   }
   
   public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
   {
    return true;
   }
   
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值