`
nanjingjiangbiao_T
  • 浏览: 2599055 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android--DPAD键的事件处理

 
阅读更多

什么是键?相信大家可能并不会陌生,它就是手机上的方向键,还有一个是中间键。

如下截图:

其中红色的标记就是DPAD键。


下面我们实现的这个例子是利用方向键操作按钮上下左右的移动,并利用中间键使得按钮恢复到屏幕的中间位置。

我们需要重载一个函数:

public boolean onKeyDown(int keyCode, KeyEvent event)
通过判断keyCode来做出相应的动作。

下面给出完整的代码:

public class EX05_20 extends Activity
{
  private Button mButton01;
  private int intWidth, intHeight, intButtonX, intButtonY;
  
  /* 保存屏幕的分辨率 */
  private int intScreenX, intScreenY;
  
  /* 按钮位移的平移量 */
  private int intShift = 5;
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    
    /* 取得屏幕解析像素 */
    intScreenX = dm.widthPixels;
    intScreenY = dm.heightPixels;
    
    /* 定义按钮的宽x高 */
    intWidth = 80;
    intHeight = 80;
    
    mButton01 =(Button) findViewById(R.id.myButton1);
    
    /* 初始化按钮位置置中 */
    RestoreButton();
    
    /* 当按下按钮,还原初始位置 */
    mButton01.setOnClickListener(new Button.OnClickListener()
    {
      @Override
      public void onClick(View v)
      {
        // TODO Auto-generated method stub
        RestoreButton();
      }
    });
  }
  
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event)
  {
    // TODO Auto-generated method stub
    switch(keyCode)
    {
      /* 中间按键 */
      case KeyEvent.KEYCODE_DPAD_CENTER:
        /* keyCode=23 */
        RestoreButton();
        break;
      /* 上按键 */
      case KeyEvent.KEYCODE_DPAD_UP:
        /* keyCode=19 */
        MoveButtonUp();
        break;
      /* 下按键 */
      case KeyEvent.KEYCODE_DPAD_DOWN:
        /* keyCode=20 */
        MoveButtonDown();
        break;
      /* 左按键 */
      case KeyEvent.KEYCODE_DPAD_LEFT:
        /* keyCode=21 */
        MoveButtonLeft();
        break;
      /* 右按键 */
      case KeyEvent.KEYCODE_DPAD_RIGHT:
        /* keyCode=22 */
        MoveButtonRight();
        break;
    }
    return super.onKeyDown(keyCode, event);
  }
  
  /* 还原按钮位置的事件处理 */
  public void RestoreButton()
  {
    //标记按钮的位置在屏幕的中心
    intButtonX = ((intScreenX-intWidth)/2);
    intButtonY = ((intScreenY-intHeight)/2);
    mMakeTextToast("("+Integer.toString(intButtonX)+","+Integer.toString(intButtonY)+")",true);
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD上按键时事件处理 */
  public void MoveButtonUp()
  {
    intButtonY = intButtonY-intShift;
    if(intButtonY<0)
    {
      intButtonY = 0;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD下按键时事件处理 */
  public void MoveButtonDown()
  {
    intButtonY = intButtonY+intShift;
    if(intButtonY>(intScreenY-intHeight))
    {
      intButtonY = intScreenY-intHeight;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD左按键时事件处理 */
  public void MoveButtonLeft()
  {
    intButtonX = intButtonX-intShift;
    if(intButtonX<0)
    {
      intButtonX = 0;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD右按键时事件处理 */
  public void MoveButtonRight()
  {
    intButtonX = intButtonX+intShift;
    if(intButtonX>(intScreenX-intWidth))
    {
      intButtonX = intScreenX-intWidth;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  public void mMakeTextToast(String str, boolean isLong)
  {
    if(isLong==true)
    {
      Toast.makeText(EX05_20.this, str, Toast.LENGTH_LONG).show();
    }
    else
    {
      Toast.makeText(EX05_20.this, str, Toast.LENGTH_SHORT).show();
    }
  }
}




分享到:
评论

相关推荐

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google Android SDK开发范例大全的目录

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    《Google Android SDK开发范例大全(第3版)》.pdf

    5.20 dpad按键处理 245 5.21 任务管理器正在运行的程序 249 5.22 动态更改屏幕方向 254 5.23 系统设置更改事件 257 5.24 取得电信网络与手机的相关信息 261 5.25 建立自己的手写笔画图案 266 5.26...

    为Android / Fire TV构建的Flutter小部件-Flutter开发

    此小部件有两种方法:1)Function onClick该方法支持Dpad键码23和简单的键盘键66 1)Function(布尔isFocused)onFocus此方法在发生吸引作用时返回true,而在控件移开时返回false。 有关更多详细信息,请导航到lib...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息...

    Google Android SDK开发范例大全(第3版) 1/5

    5.20 DPAD按键处理 5.21 任务管理器正在运行的程序 5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全...

    Google Android SDK开发范例大全(第3版) 4/5

    5.20 DPAD按键处理 5.21 任务管理器正在运行的程序 5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全...

    Google Android SDK开发范例大全(第3版) 3/5

    5.20 DPAD按键处理 5.21 任务管理器正在运行的程序 5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全...

    Google Android SDK开发范例大全(第3版) 5/5

    5.20 DPAD按键处理 5.21 任务管理器正在运行的程序 5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全...

    Google Android SDK开发范例大全(第3版)part2

     5.20 DPAD按键处理  5.21 任务管理器正在运行的程序  5.22 动态更改屏幕方向  5.23 系统设置更改事件  5.24 取得电信网络与手机的相关信息  5.25 建立自己的手写笔画图案  5.26 判断手持设备的WiFi与...

    Google Android SDK 开发范例大全01

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google Android SDK 开发范例大全02

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google Android sdk 开发范例大全 部分章节代码

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google+Android+SDK开发范例大全

    5.18 取得SIM卡内的信息——TelephonyManager的应用 5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态...

    Google Android SDK开发范例大全(完整版)

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

Global site tag (gtag.js) - Google Analytics