您的当前位置:首页正文

Android 响应用户事件的方法

2024-11-12 来源:个人技术集锦

同绘图一样, View 也是通过回调函数来响应用户事件的。键盘事件的回调函数有多个,以对应不同的事件,我们暂时只用到 onKeyDown ,对应按键被按下的事件,其他函数以后用到再介绍。让我们重载 onKeyDown (重载一个函数的方法前面章节有介绍)
  @Override
  public boolean onKeyDown( int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  return super .onKeyDown(keyCode, event);
  }
  onKeyDown 有两个参数: keyCode 和 event ,通过 keyCode 能判断是哪个键被按下, event 比较复杂,包含了这次按键更多的,我们暂时先不考虑它。
  现在我们要通过按键控制主角向四个方向移动。所谓移动,就是将主角的图像在不同的位置显示出来,也就是改变函数 drawBitmap 中的第二、第三个参数。比如用户按下右方向键,我们就把横坐标增加,这样下次显示出来的时候,主角就会往右一点。为了节约时间,我们就把刚刚显示的图片 BattleCity 作为主角好了。首先定义两个全局变量 x 和 y ,然后在 onKeyDown 中改变 x 、 y 的值,然后重绘 View 。因为代码没有什么难度,所以不做讲解了。
  public class GameView extends View {
  int x =0, y =0;
  ……
  @Override
  protected void onDraw(Canvas canvas) {
  ……
  canvas.drawBitmap( bmp , x , y , new Paint());
  }
  @Override
  public boolean onKeyDown( int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  switch (keyCode) {
  case KeyEvent. KEYCODE_DPAD_UP :
  y -= 10;
  break ;
  case KeyEvent. KEYCODE_DPAD_DOWN :
  y += 10;
  break ;
  case KeyEvent. KEYCODE_DPAD_LEFT :
  x -= 10;
  break ;
  case KeyEvent. KEYCODE_DPAD_RIGHT :
  x += 10;
  break ;
  }
  postInvalidate(); // 通知重绘 View

======黑软基地资讯频道======
  
  return super .onKeyDown(keyCode, event);
  }
  }
  完成后我们肯定很想测试一下,但是此时你会发现,按键根本没有任何反应。这就是我们要特殊指出的地方。 View 被显示时,缺省情况下没有获得焦点,就是说,按键动作没有发送给 View ,所以需要在构造函数中增加一句
  public GameView(Context context) {
  ……
  setFocusable( true );
  }
  再运行程序,看看图片是否按照我们的指令运动起来了。
  前面说过,很多没有硬键盘,所以我们需要一个软键盘的。软键盘就是在屏幕上显示一个键盘,然后响应用户的触摸屏操作,模拟成键盘操作。对于坦克大战,我们只需要在屏幕上显示一个模拟的游戏手柄(显示图片的方法大家没有忘记吧,显示位置可以根据模拟器自行调整):

转载于:https://www.cnblogs.com/hmyprograming/archive/2012/03/23/2414156.html

显示全文